예제 #1
0
 public override void Visit(InternalNew node) { Visit((InternalInvocation)node); }
예제 #2
0
      public override void Visit(InternalNew node)
      {
        PushLocation(node);

        VisitNodes(node.Arguments);
        _ilGen.Newobj(node.Constructor);
        _result.Type = node.Constructor.DeclaringType;

        PopLocation();
      }
예제 #3
0
 internal static mdr.ValueTypes GetType(InternalNew node) { return mdr.ValueTypes.Unknown; }
예제 #4
0
 public override void Visit(InternalNew node) { base.Visit(node); node.ValueType = GetType(node); }
예제 #5
0
      public override void Visit(InternalNew node)
      {
        PushLocation(node);

        var resultIndex = _stackModel.StackPointer;

        VisitNodes(node.Arguments);
        _stackModel.Pop(node.Arguments.Count);


        BeginICMethod(node);
        LoadArguments(node, node.Constructor, resultIndex);
        _ilGen.Newobj(node.Constructor);
        _ilGen.StoreValue(resultIndex, Types.ValueTypeOf(node.Constructor.DeclaringType));
        _stackModel.Push(1);
        EndICMethod();

        PopLocation();
      }
예제 #6
0
 public override void Visit(InternalNew node)
 {
     Visit((InternalInvocation)node);
 }
예제 #7
0
 public abstract void Visit(InternalNew node);
예제 #8
0
      public override void Visit(InternalNew node)
      {
        PushLocation(node);

        var parameters = node.Constructor.GetParameters();
        Debug.Assert(node.Arguments.Count == parameters.Length, "Arguments mismatch between node {0} and constructor {1} of {2}", node, node.Constructor, node.Constructor.DeclaringType);
        for (int i = 0; i < node.Arguments.Count; ++i)
          LoadFromStack(node.Arguments[i], parameters[i].ParameterType);
        _ilGen.Newobj(node.Constructor);
        StoreToStack(node.Constructor.DeclaringType);

        PopLocation();
      }
예제 #9
0
 public override void Visit(InternalNew node) { throw new InvalidOperationException(); }