示例#1
0
        private void _storeArgementToSlot(int id,RunTimeValueBase v)
        {
            var signature = toCallFunc.signature;

            if (signature.onStackParameters > 0)
            {
                ASBinCode.rtti.FunctionParameter fp = signature.parameters[id];

                if (fp.isOnStack)
                {
                    StackSlotAccessor r = (StackSlotAccessor)fp.varorreg;
                    //int index = invokerFrame.offset + invokerFrame.block.totalRegisters + 1 + 1+ invokerFrame.call_parameter_slotCount + r._index;
                    int index = invokerFrame.baseBottomSlotIndex + invokerFrame.call_parameter_slotCount + r._index;
                    invokerFrame.stack[index].directSet(v);
                }
                else
                {
                    CallFuncHeap[((Variable)fp.varorreg).indexOfMembers].directSet(
                        v

                        );
                }
            }
            else
            {
                CallFuncHeap[id].directSet(v);
            }
        }
示例#2
0
        private SLOT _getArgementSlot(int id)
        {
            var signature = toCallFunc.signature;

            if (signature.onStackParameters > 0)
            {
                ASBinCode.rtti.FunctionParameter fp = signature.parameters[id];

                if (fp.isOnStack)
                {
                    StackSlotAccessor r = (StackSlotAccessor)fp.varorreg;
                    //int index = invokerFrame.offset + invokerFrame.block.totalRegisters + 1 + 1 + invokerFrame.call_parameter_slotCount + r._index;
                    int index = invokerFrame.baseBottomSlotIndex + invokerFrame.call_parameter_slotCount + r._index;
                    return(invokerFrame.stack[index]);
                }
                else
                {
                    return(CallFuncHeap[((Variable)fp.varorreg).indexOfMembers]);
                }
            }
            else
            {
                return(CallFuncHeap[id]);
            }
        }