private StackItem[] PrepareEntryPointArguments(MethodDefinition entryPoint, string[] args) { var signature = entryPoint.DecodeSignature(SignatureTypeCodeProvider.Instance, null); if (signature.ParameterTypes.Length > 1) { ThrowHelper.ThrowInvalidProgramException(); } // The first argument is the return value var arguments = new StackItem[signature.ParameterTypes.Length + 1]; if (signature.ParameterTypes.Length == 1) { //if (signature.ParameterTypes[0] != SignatureTypeCode.Array) //{ // ThrowHelper.ThrowInvalidProgramException(); //} var argumentItems = args.Select(a => StackItem.FromObjectRef(a)).ToArray(); arguments[1] = StackItem.FromObjectRef(argumentItems); } return(arguments); }
public static StackItem ToStackItem(this object value, Type type) { switch (Type.GetTypeCode(type)) { case TypeCode.Boolean: case TypeCode.Byte: case TypeCode.Char: case TypeCode.Int16: case TypeCode.Int32: case TypeCode.SByte: case TypeCode.UInt16: case TypeCode.UInt32: return(StackItem.FromInt32((int)value)); case TypeCode.DateTime: break; case TypeCode.Decimal: case TypeCode.Double: case TypeCode.Single: return(StackItem.FromDouble((double)value)); case TypeCode.Int64: case TypeCode.UInt64: return(StackItem.FromInt64((long)value)); case TypeCode.Empty: case TypeCode.Object: case TypeCode.String: return(StackItem.FromObjectRef(value)); default: throw new NotImplementedException(); } throw new NotImplementedException(); }
private void ImportLoadString(int token) { string str = (string)_methodIL.GetObject(token); _interpreter.EvaluationStack.Push(StackItem.FromObjectRef(str)); }
private void ImportLoadNull() { _interpreter.EvaluationStack.Push(StackItem.FromObjectRef(null)); }