Esempio n. 1
0
 public override void Visit(ReturnStatement node)
 {
   VisitNode(node.Expression);
   Visit((Statement)node);
 }
Esempio n. 2
0
      public override void Visit(ReturnStatement node)
      {
        PushLocation(node);

        if (node.Expression != null)
        {
          var stackState = _localVars.GetTemporaryStackState();
          Ldarg_CallFrame();
          _ilGen.Ldflda(Types.CallFrame.Return);
          VisitNode(node.Expression);
          _ilGen.Call(Types.DValue.Set.Get(_result.ValueType));
          _localVars.PopTemporariesAfter(stackState);
        }

        PopLocation();

        if (_labelInfos.CurrProtectedRegion == null)
          _ilGen.Br(_epilogLabel);
        else
          _ilGen.Leave(_epilogLabel);
      }
      public override void Visit(ReturnStatement node)
      {
        PushLocation(node);
        if (node.Expression != null)
        {
          VisitNode(node.Expression);
        }

        BeginICMethod("Return");
        if (node.Expression != null)
        {
          _stackModel.Pop(1);

          _ilGen.Ldarg_CallFrame();
          _ilGen.Ldc_I4(_stackModel.StackPointer);
          _ilGen.Call(Types.Operations.ICMethods.Return);
        }

        Br(int.MaxValue);
        EndICMethod();

        PopLocation();
      }
Esempio n. 4
0
 public override void Visit(ReturnStatement node) { Visit((Statement)node); }
Esempio n. 5
0
      public override void Visit(ReturnStatement node)
      {
        var gotoEnd = new GotoStatement(_returnLabelName);
        if (node.Expression != null)
        {
          //We have a return value as well
          var cloned = new BlockStatement(new List<Statement>());

          var returnValue = GetCloneOf(node.Expression);

          var retAssign = new WriteIdentifierExpression(_returnValueSymbol, returnValue);
          cloned.Statements.Add(gotoEnd);
          cloned.Statements.Add(new ExpressionStatement(retAssign));
          result = cloned;
        }
        else
        {
          result = gotoEnd;
        }
      }
Esempio n. 6
0
 public ReturnStatement MakeReturnStatement(Scope scope, IExpression expression, int offset)
 {
   var n = new ReturnStatement((Expression)expression, offset);
   scope.Returns.Add(n);
   return n;
 }
Esempio n. 7
0
      public override void Visit(ReturnStatement node)
      {
        PushLocation(node);

        if (node.Expression != null)
        {
          VisitNode(node.Expression);
          Ldarg_CallFrame();
          Call(Types.Operations.Stack.Return, 1, 0);
        }

        PopLocation();

        if (_labelInfos.CurrProtectedRegion == null)
          _ilGen.Br(_epilogLabel);
        else
          _ilGen.Leave(_epilogLabel);
      }
Esempio n. 8
0
 public override void Visit(ReturnStatement node)
 {
   throw new NotImplementedException();
 }
Esempio n. 9
0
 public override void Visit(ReturnStatement node) { }