Esempio n. 1
0
        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();
        }
Esempio n. 3
0
        private void ImportLoadString(int token)
        {
            string str = (string)_methodIL.GetObject(token);

            _interpreter.EvaluationStack.Push(StackItem.FromObjectRef(str));
        }
Esempio n. 4
0
 private void ImportLoadNull()
 {
     _interpreter.EvaluationStack.Push(StackItem.FromObjectRef(null));
 }