internal static dynamic PropertyNameAndExpression(BaseInterpreterStack stack) { dynamic result = new ExpandoObject(); result.PropertyName = stack.Pop<WARPObject>().AsString(); result.Expression = stack.Pop<WARPObject>(); return result; }
internal override void Execute(InterpreterState state, SourceCode code, BaseInterpreterStack stack) { var obj = stack.Pop<WARPObject>(); PropertyBasedExecutionEnvironment env = Environment(state); if (!env.HasScratchPadEntry(Constants.KeyWords.Comparison)) { stack.Push(obj); PropertyBasedExecutionEnvironment.ScratchPad[Constants.KeyWords.Comparison] = String.Empty; } else { var lhs = stack.Pop<WARPObject>(); PropertyBasedExecutionEnvironment.ScratchPad.Remove(Constants.KeyWords.Comparison); var bothNumeric = lhs.IsNumeric && obj.IsNumeric; Func<int> cmp = () => { var f = lhs.AsNumeric(); var s = obj.AsNumeric(); return (f < s ? -1 : (f > s ? 1 : 0)); }; stack.Push(new WARPObject(bothNumeric ? cmp() : string.Compare(lhs.AsString(), obj.AsString()))); } }
internal override void Execute(InterpreterState state, SourceCode code, BaseInterpreterStack stack) { RandomAccessStack<WARPObject> st = PropertyBasedExecutionEnvironment.ScratchPad[Constants.RASName] as RandomAccessStack<WARPObject>; st.Set((int)stack.Pop<WARPObject>().AsNumeric()); Action(st, stack); }
internal override void Execute(InterpreterState state, SourceCode code, BaseInterpreterStack stack) { var val = ((WARPObject)Environment(state)[stack.Pop<WARPObject>().AsString()]).AsString(); state.AddExecutionEnvironment<PropertyBasedExecutionEnvironment>(); val.Reverse().ToList().ForEach(c => Environment(state).Push(new WARPObject(new string(new[] { c })))); }
internal override void Execute(InterpreterState state, SourceCode code, BaseInterpreterStack stack) { var obj = stack.Pop(); stack.Pop(); stack.Push(obj); }
internal override void Execute(InterpreterState state, SourceCode source, BaseInterpreterStack stack) { dynamic result = PropertyNameAndExpression(stack); bool inPopMode = result.PropertyName == Constants.KeyWords.Pop; var pbee = Environment(state); Int64 cur = inPopMode ? stack.Pop<WARPObject>().AsNumeric() : pbee[result.PropertyName].As<WARPObject>().AsNumeric(); var obj = new WARPObject(FlexibleNumeralSystem.Encode(Command(cur, result.Expression), WARPObject.CurrentRadix)); if (result.PropertyName == Constants.KeyWords.Pop) pbee.Push(obj); else pbee[result.PropertyName] = obj; }
internal override void Execute(InterpreterState state, SourceCode source, BaseInterpreterStack stack) { PropertyBasedExecutionEnvironment.ScratchPad[stack.Pop<WARPObject>().AsString()] = source.SourcePosition.Copy(); }
internal override void Execute(InterpreterState state, SourceCode code, BaseInterpreterStack stack) { var style = stack.Pop<WARPObject>().AsString(); ExecutionSupport.Assert(Options.Contains(style), string.Concat("Invalid argument for ',' - ", style)); stack.Push(style == "l" ? new WARPObject(InteractionWrapper.ReadString("0").Result) : new WARPObject(Convert.ToChar(InteractionWrapper.ReadCharacter().Result))); }
internal override void Execute(InterpreterState state, SourceCode code, BaseInterpreterStack stack) { var lhs = stack.Pop<WARPObject>().AsNumeric(); var rhs = stack.Pop<WARPObject>().AsNumeric(); dynamic res = CommandBuilder.KeyAndBuilder(state); CMD cmd = Gather(state, res.Key, res.Builder); ExecutionSupport.Emit(() => string.Concat("Comparison: ", lhs, " == ", rhs, "?")); if (lhs == rhs) cmd.Apply(state); }