Пример #1
0
        private void Init(StackValue svThisPtr, int classIndex, int funcIndex, int pc, int functionBlockDecl, int functionBlockCaller, StackFrameType callerType, StackFrameType type, int depth,
                          int framePointer, List <StackValue> stack)
        {
            Validity.Assert((int)StackFrame.AbsoluteIndex.kSize == kStackFrameSize);

            Frame = new StackValue[kStackFrameSize];

            Frame[(int)AbsoluteIndex.kFramePointer]         = StackUtils.BuildInt(framePointer);
            Frame[(int)AbsoluteIndex.kStackFrameType]       = StackUtils.BuildNode(AddressType.FrameType, (int)type);
            Frame[(int)AbsoluteIndex.kCallerStackFrameType] = StackUtils.BuildNode(AddressType.FrameType, (int)callerType);
            Frame[(int)AbsoluteIndex.kStackFrameDepth]      = StackUtils.BuildInt(depth);
            Frame[(int)AbsoluteIndex.kFunctionCallerBlock]  = StackUtils.BuildNode(AddressType.BlockIndex, functionBlockCaller);
            Frame[(int)AbsoluteIndex.kFunctionBlock]        = StackUtils.BuildNode(AddressType.BlockIndex, functionBlockDecl);
            Frame[(int)AbsoluteIndex.kReturnAddress]        = StackUtils.BuildInt(pc);
            Frame[(int)AbsoluteIndex.kFunction]             = StackUtils.BuildInt(funcIndex);
            Frame[(int)AbsoluteIndex.kClass]   = StackUtils.BuildInt(classIndex);
            Frame[(int)AbsoluteIndex.kThisPtr] = svThisPtr;

            Frame[(int)AbsoluteIndex.kRegisterAX] = stack[0];
            Frame[(int)AbsoluteIndex.kRegisterBX] = stack[1];
            Frame[(int)AbsoluteIndex.kRegisterCX] = stack[2];
            Frame[(int)AbsoluteIndex.kRegisterDX] = stack[3];
            Frame[(int)AbsoluteIndex.kRegisterEX] = stack[4];
            Frame[(int)AbsoluteIndex.kRegisterFX] = stack[5];
            Frame[(int)AbsoluteIndex.kRegisterLX] = stack[6];
            Frame[(int)AbsoluteIndex.kRegisterRX] = stack[7];
            Frame[(int)AbsoluteIndex.kRegisterSX] = stack[8];
            Frame[(int)AbsoluteIndex.kRegisterTX] = stack[9];

            Validity.Assert(kStackFrameSize == Frame.Length);
        }
Пример #2
0
        private void Init(StackValue svThisPtr, int classIndex, int funcIndex, int pc, int functionBlockDecl, int functionBlockCaller, StackFrameType callerType, StackFrameType type, int depth,
                          int framePointer, List <StackValue> stack, List <bool> execStates)
        {
            Validity.Assert((int)StackFrame.AbsoluteIndex.kSize == kStackFrameSize);

            Frame = new StackValue[kStackFrameSize];

            Frame[(int)AbsoluteIndex.kFramePointer]         = StackUtils.BuildInt(framePointer);
            Frame[(int)AbsoluteIndex.kStackFrameType]       = StackUtils.BuildNode(AddressType.FrameType, (int)type);
            Frame[(int)AbsoluteIndex.kCallerStackFrameType] = StackUtils.BuildNode(AddressType.FrameType, (int)callerType);
            Frame[(int)AbsoluteIndex.kStackFrameDepth]      = StackUtils.BuildInt(depth);
            Frame[(int)AbsoluteIndex.kFunctionCallerBlock]  = StackUtils.BuildNode(AddressType.BlockIndex, functionBlockCaller);
            Frame[(int)AbsoluteIndex.kFunctionBlock]        = StackUtils.BuildNode(AddressType.BlockIndex, functionBlockDecl);
            Frame[(int)AbsoluteIndex.kReturnAddress]        = StackUtils.BuildInt(pc);
            Frame[(int)AbsoluteIndex.kFunction]             = StackUtils.BuildInt(funcIndex);
            Frame[(int)AbsoluteIndex.kClass]   = StackUtils.BuildInt(classIndex);
            Frame[(int)AbsoluteIndex.kThisPtr] = svThisPtr;

            Frame[(int)AbsoluteIndex.kRegisterAX] = stack[0];
            Frame[(int)AbsoluteIndex.kRegisterBX] = stack[1];
            Frame[(int)AbsoluteIndex.kRegisterCX] = stack[2];
            Frame[(int)AbsoluteIndex.kRegisterDX] = stack[3];
            Frame[(int)AbsoluteIndex.kRegisterEX] = stack[4];
            Frame[(int)AbsoluteIndex.kRegisterFX] = stack[5];
            Frame[(int)AbsoluteIndex.kRegisterLX] = stack[6];
            Frame[(int)AbsoluteIndex.kRegisterRX] = stack[7];
            Frame[(int)AbsoluteIndex.kRegisterSX] = stack[8];
            Frame[(int)AbsoluteIndex.kRegisterTX] = stack[9];

            int execStateSize = 0;

            if (null != execStates)
            {
                execStateSize   = execStates.Count;
                ExecutionStates = new StackValue[execStateSize];
                for (int n = 0; n < execStateSize; ++n)
                {
                    ExecutionStates[n] = StackUtils.BuildBoolean(execStates[n]);
                }
            }

            Frame[(int)AbsoluteIndex.kExecutionStates] = StackUtils.BuildInt(execStateSize);
            Frame[(int)AbsoluteIndex.kLocalVariables]  = StackUtils.BuildInt(0);

            Validity.Assert(kStackFrameSize == Frame.Length);
        }
Пример #3
0
 public void Push(Int64 val)
 {
     runtime.rmem.Push(StackUtils.BuildInt(val));
 }