示例#1
0
        public override ILValue CreateInstance(DmdConstructorInfo ctor, ILValue[] arguments)
        {
            DbgDotNetValueResult res;

            DbgDotNetArrayDimensionInfo[] dimensionInfos;
            switch (ctor.SpecialMethodKind)
            {
            case DmdSpecialMethodKind.Array_Constructor1:
                dimensionInfos = new DbgDotNetArrayDimensionInfo[arguments.Length];
                for (int i = 0; i < dimensionInfos.Length; i++)
                {
                    dimensionInfos[i] = new DbgDotNetArrayDimensionInfo(0, (uint)ReadInt32(arguments[i]));
                }
                res = runtime.CreateArray(context, frame, ctor.ReflectedType.GetElementType(), dimensionInfos, cancellationToken);
                return(CreateILValue(res));

            case DmdSpecialMethodKind.Array_Constructor2:
                dimensionInfos = new DbgDotNetArrayDimensionInfo[arguments.Length / 2];
                for (int i = 0; i < dimensionInfos.Length; i++)
                {
                    dimensionInfos[i] = new DbgDotNetArrayDimensionInfo(ReadInt32(arguments[i * 2]), (uint)ReadInt32(arguments[i * 2 + 1]));
                }
                res = runtime.CreateArray(context, frame, ctor.ReflectedType.GetElementType(), dimensionInfos, cancellationToken);
                return(CreateILValue(res));

            default:
                res = runtime.CreateInstance(context, frame, ctor, Convert(arguments, ctor.GetMethodSignature().GetParameterTypes()), cancellationToken);
                return(CreateILValue(res));
            }
        }
示例#2
0
        public override ILValue CreateInstance(DmdConstructorInfo ctor, ILValue[] arguments)
        {
            DbgDotNetValueResult res;

            DbgDotNetArrayDimensionInfo[] dimensionInfos;
            switch (ctor.SpecialMethodKind)
            {
            case DmdSpecialMethodKind.Array_Constructor1:
                dimensionInfos = new DbgDotNetArrayDimensionInfo[arguments.Length];
                for (int i = 0; i < dimensionInfos.Length; i++)
                {
                    dimensionInfos[i] = new DbgDotNetArrayDimensionInfo(0, (uint)ReadInt32(arguments[i]));
                }
                res = runtime.CreateArray(evalInfo, ctor.ReflectedType.GetElementType(), dimensionInfos);
                return(CreateILValue(res));

            case DmdSpecialMethodKind.Array_Constructor2:
                dimensionInfos = new DbgDotNetArrayDimensionInfo[arguments.Length / 2];
                for (int i = 0; i < dimensionInfos.Length; i++)
                {
                    dimensionInfos[i] = new DbgDotNetArrayDimensionInfo(ReadInt32(arguments[i * 2]), (uint)ReadInt32(arguments[i * 2 + 1]));
                }
                res = runtime.CreateArray(evalInfo, ctor.ReflectedType.GetElementType(), dimensionInfos);
                return(CreateILValue(res));

            default:
                res = CreateInstanceCore(ctor, arguments);
                return(CreateILValue(res));
            }
        }