public override void VisitNewArrayInstruction(NewArrayInstruction instruction)
        {
            ControlState.EvaluationStack.PopValue(out CilValueInt32 numElems);

            var newArr = new CilArray(instruction.TypeSpec.GetCilType(_program), numElems.Value, _program);
            var arrRef = ManagedMemory.Store(newArr);

            ControlState.EvaluationStack.PushValue(arrRef);

            ControlState.MoveToNextInstruction();
        }
示例#2
0
        public override IValue CreateValueFromRuntime(object obj, CilManagedMemory managedMemory, CilProgram program)
        {
            var runtimeArr = obj as Array;

            if (Dimensions == 1)
            {
                var resultArray = new IValue[runtimeArr.Length];
                for (int i = 0; i < runtimeArr.Length; i++)
                {
                    resultArray[i] = ElementType.CreateValueFromRuntime(runtimeArr.GetValue(i), managedMemory, program);
                }

                var cilArray = new CilArray(resultArray, ElementType);
                var arrayRef = managedMemory.Store(cilArray);
                return(arrayRef);
            }

            var extObj = new CilObjectExternal(obj);
            var objRef = managedMemory.Store(extObj);

            return(objRef);
        }