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);
 }