Beispiel #1
0
 public override void Visit(DeleteExpression node) { Visit((UnaryExpression)node); }
Beispiel #2
0
      //{
      //  Visit(node, Types.Operations.Convert.ToObject);
      //  _ilGen.Callvirt(Types.DObject.ToDFunction);
      //  _result.ValueType = mdr.ValueTypes.Function;
      //}

      #endregion

      #region Unary Operators; ECMA 11.4 -------------------------------------------------------------------------------------

      public override void Visit(DeleteExpression node)
      {
        var expression = node.Expression;
        var parent = expression as ParenExpression;
        if (parent != null)
          expression = parent.Expression;
        var indexer = expression as ReadIndexerExpression;
        if (indexer != null)
        {
          PushLocation(node);
          var stackState = _localVars.GetTemporaryStackState();
          VisitNode(indexer.Container);
          var containerType = _result.ValueType;
          VisitNode(indexer.Index);
          var indexType = _result.ValueType;
          _localVars.PopTemporariesAfter(stackState);
          _ilGen.Call(Types.Operations.Unary.DeleteProperty.Get(containerType, indexType));
          _result.ValueType = mdr.ValueTypes.Boolean;
          PopLocation();
        }
        else
        {
          //we need to visit in case the expression has side effects, but then throw away result
          var readId = expression as ReadIdentifierExpression;
          if (readId != null)
          {
            PushLocation(node);
            var stackState = _localVars.GetTemporaryStackState();
            VisitNode(readId);
            AsVoid();
            _localVars.PopTemporariesAfter(stackState);

            _ilGen.Ldloc(_context);
            _ilGen.Ldc_I4(readId.Symbol.FieldId);
            _ilGen.Call(Types.Operations.Unary.DeleteVariable.Get(mdr.ValueTypes.Object, mdr.ValueTypes.Int32));
            _result.ValueType = mdr.ValueTypes.Boolean;
            PopLocation();
          }
          else
            Visit(node, Types.Operations.Unary.Delete);
        }
      }
Beispiel #3
0
 internal static mdr.ValueTypes GetType(DeleteExpression expression) { return Types.Operations.Unary.Delete.ReturnType(expression.Expression.ValueType); }
Beispiel #4
0
 public override void Visit(DeleteExpression node) { base.Visit(node); node.ValueType = GetType(node); }
Beispiel #5
0
 public override void Visit(DeleteExpression node)
 {
     Visit((UnaryExpression)node);
 }
 public override void Visit(DeleteExpression node)
 {
   throw new NotImplementedException();
 }
Beispiel #7
0
 public DeleteExpression MakeDeleteExpression(IExpression expression)
 {
   var n = new DeleteExpression((Expression)expression);
   return n;
 }
Beispiel #8
0
 public abstract void Visit(DeleteExpression node);
Beispiel #9
0
 public override void Visit(DeleteExpression node)
 {
   PushLocation(node);
   var expression = node.Expression;
   var parent = expression as ParenExpression;
   if (parent != null)
     expression = parent.Expression;
   var indexer = expression as ReadIndexerExpression;
   if (indexer != null)
   {
     VisitNode(indexer.Container);
     VisitNode(indexer.Index);
     Call(Types.Operations.Stack.DeleteProperty, 2, 1);
   }
   else
   {
     //we need to visit in case the expression has side effects, but then return false
     VisitNode(node.Expression);
     var readId = expression as ReadIdentifierExpression;
     if (readId != null)
     {
       Call(Types.Operations.Stack.Pop, 1, 0);
       _ilGen.Ldloc(_context);
       Call(Types.Operations.Stack.LoadDObject, 0, 1);
       _ilGen.Ldc_I4(readId.Symbol.FieldId);
       Call(Types.Operations.Stack.LoadInt, 0, 1);
       Call(Types.Operations.Stack.DeleteVariable, 2, 1);
     }
     else
       Call(Types.Operations.Stack.Delete, 1, 1);
   }
   PopLocation();
 }
Beispiel #10
0
        public DeleteExpression MakeDeleteExpression(IExpression expression)
        {
            var n = new DeleteExpression((Expression)expression);

            return(n);
        }
Beispiel #11
0
 public override void Visit(DeleteExpression node) { AssignToImplicitReturn(node); }