/// <summary> /// 创建一个值类型的新对象或新实例,并将对象引用(O 类型)推送到计算堆栈上。 /// </summary> /// <param name="type"></param> public void Newobj(string instance, string @return, MethodTasks task) { if (task.Clr.ArgsVarCount > 0) { //初始化 task.Clr.Argp->ValueType = StackValueType.Ref; var clrObj = new ClrObject(); task.InitMember(clrObj); task.Clr.Argp->SetValue(StackValueType.Ref, clrObj); } task.Run(); EvaluationStack_Push(task.Clr.ResultPoint); }
/// <summary> /// 创建一个值类型的新对象或新实例,并将对象引用(O 类型)推送到计算堆栈上。 /// </summary> /// <param name="type"></param> public void Newobj(string instance, string @return, MethodTasks task) { int begin = 1; if ((task is CrossMethod) && (task as CrossMethod).CrossMethodDelegate is DelegateBuild) { begin = 0; } else { if (task.Clr.ArgsVarCount > 0) { //初始化 var clrObj = new ClrObject(); task.InitMember(clrObj); task.Clr.Argp->SetValue(StackValueType.Ref, clrObj, true); } } if (task.Clr.ArgsVarCount > 0) { var vs = EvaluationStack_Pop(task.Clr.ArgsVarCount - begin); for (int i = 0; i < task.Clr.ArgsVarCount - begin; i++) { *(task.Clr.Argp + i + begin) = *(vs + i); (task.Clr.Argp + i + begin)->Fix(); } } task.Run(() => { EvaluationStack_Push(task.Clr.ResultPoint); }); }