public override object CreateValue(EvaluationContext ctx, object type, params object[] args)
        {
            ctx.AssertTargetInvokeAllowed();

            SoftEvaluationContext cx = (SoftEvaluationContext)ctx;
            TypeMirror            t  = (TypeMirror)type;

            TypeMirror[] types = new TypeMirror [args.Length];
            for (int n = 0; n < args.Length; n++)
            {
                types [n] = ToTypeMirror(ctx, GetValueType(ctx, args [n]));
            }

            Value[] values = new Value[args.Length];
            for (int n = 0; n < args.Length; n++)
            {
                values[n] = (Value)args [n];
            }

            MethodMirror ctor = OverloadResolve(cx, ".ctor", t, types, true, true, true);

            return(t.NewInstance(cx.Thread, ctor, values));
        }