示例#1
0
        // End code iteration functions
        //
        // Conversion instructions to code
        //
        public override void Execute(Interpreter inI)
        {
            ObjectStack  codeStack = inI.CodeStack();
            BooleanStack bStack    = inI.BoolStack();

            if (bStack.Size() > 0)
            {
                codeStack.Push(bStack.Pop());
            }
        }
示例#2
0
        public override void Execute(Interpreter inI)
        {
            IntStack    istack = inI.IntStack();
            ObjectStack estack = inI.ExecStack();

            if (_stack.Size() > 0 && istack.Size() > 0)
            {
                if (istack.Top() > 0)
                {
                    object bodyObj = _stack.Pop();
                    if (bodyObj is Program)
                    {
                        // insert integer.pop in front of program
                        ((Program)bodyObj).Shove("integer.pop", ((Program)bodyObj)._size);
                    }
                    else
                    {
                        // create a new program with integer.pop in front of
                        // the popped object
                        Program newProgram = new Program();
                        newProgram.Push("integer.pop");
                        newProgram.Push(bodyObj);
                        bodyObj = newProgram;
                    }
                    int stop = istack.Pop() - 1;
                    try
                    {
                        Program doRangeMacroProgram = new Program();
                        doRangeMacroProgram.Push(0);
                        doRangeMacroProgram.Push(stop);
                        doRangeMacroProgram.Push("code.quote");
                        doRangeMacroProgram.Push(bodyObj);
                        doRangeMacroProgram.Push("code.do*range");
                        estack.Push(doRangeMacroProgram);
                    }
                    catch (Exception)
                    {
                        Console.Error.WriteLine("Error while initializing a program.");
                    }
                }
            }
        }
示例#3
0
        public override void Execute(Interpreter inI)
        {
            BooleanStack bstack = inI.BoolStack();
            ObjectStack  estack = inI.ExecStack();

            if (_stack.Size() > 1 && bstack.Size() > 0)
            {
                bool   istrue  = bstack.Pop();
                object iftrue  = _stack.Pop();
                object iffalse = _stack.Pop();
                if (istrue)
                {
                    estack.Push(iftrue);
                }
                else
                {
                    estack.Push(iffalse);
                }
            }
        }
示例#4
0
        public void PushInput(Interpreter inI, int n)
        {
            ObjectStack _stack = inI.InputStack();

            if (_stack.Size() > n)
            {
                object inObject = _stack.DeepPeek(n);
                if (inObject is int)
                {
                    IntStack istack = inI.IntStack();
                    istack.Push((int)inObject);
                }
                else
                {
                    // if (inObject is Number)
                    // {
                    //   FloatStack fstack = inI.FloatStack();
                    //   fstack.Push(((Number)inObject).FloatValue());
                    // }
                    //else
                    if (inObject is float)
                    {
                        FloatStack fstack = inI.FloatStack();
                        fstack.Push((float)inObject);
                    }
                    else
                    {
                        if (inObject is bool)
                        {
                            BooleanStack bstack = inI.BoolStack();
                            bstack.Push((bool)inObject);
                        }
                        else
                        {
                            Console.Error.WriteLine("Error during input.index - object " + inObject.GetType() +
                                                    " is not a legal object according to " + this.GetType() + ".");
                        }
                    }
                }
            }
        }
示例#5
0
        // Begin exec iteration functions
        public override void Execute(Interpreter inI)
        {
            IntStack    istack = inI.IntStack();
            ObjectStack estack = inI.ExecStack();

            if (_stack.Size() > 0 && istack.Size() > 1)
            {
                int    stop  = istack.Pop();
                int    start = istack.Pop();
                object code  = _stack.Pop();
                if (start == stop)
                {
                    istack.Push(start);
                    estack.Push(code);
                }
                else
                {
                    istack.Push(start);
                    start = (start < stop) ? (start + 1) : (start - 1);
                    // trh//Made changes to correct errors with code.do*range
                    try
                    {
                        Program recursiveCallProgram = new Program();
                        recursiveCallProgram.Push(start);
                        recursiveCallProgram.Push(stop);
                        recursiveCallProgram.Push("exec.do*range");
                        recursiveCallProgram.Push(code);
                        estack.Push(recursiveCallProgram);
                    }
                    catch (Exception)
                    {
                        Console.Error.WriteLine("Error while initializing a program.");
                    }
                    estack.Push(code);
                }
            }
        }
示例#6
0
 internal ObjectStackInstruction(ObjectStack inStack)
 {
     _stack = inStack;
 }
示例#7
0
 internal IF(ObjectStack inStack)
     : base(inStack)
 {
 }
示例#8
0
 internal ObjectEquals(ObjectStack inStack)
     : base(inStack)
 {
 }
示例#9
0
 internal RandomPushCode(ObjectStack inStack)
     : base(inStack)
 {
     Rng = new Random();
 }
示例#10
0
 internal ExecY(ObjectStack inStack)
     : base(inStack)
 {
 }
示例#11
0
 internal ExecS(ObjectStack inStack, int inMaxPointsInProgram)
     : base(inStack)
 {
     _maxPointsInProgram = inMaxPointsInProgram;
 }
示例#12
0
 public ObjectConstant(ObjectStack inStack, object inValue) : base(inStack)
 {
     _value = inValue;
 }
示例#13
0
 internal InputIndex(ObjectStack inStack)
     : base(inStack)
 {
 }
示例#14
0
 internal InputInRev(ObjectStack inStack)
     : base(inStack)
 {
 }
示例#15
0
 internal InputInAll(ObjectStack inStack)
     : base(inStack)
 {
 }