001 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 002 // for details. All rights reserved. Use of this source code is governed by a 003 // BSD-style license that can be found in the LICENSE file. 004 005 package com.google.dart.compiler.backend.js.ast; 006 007 public abstract class JsUnaryOperation extends JsExpressionImpl { 008 009 private JsExpression arg; 010 011 private final JsUnaryOperator op; 012 013 public JsUnaryOperation(JsUnaryOperator op) { 014 this(op, null); 015 } 016 017 public JsUnaryOperation(JsUnaryOperator op, JsExpression arg) { 018 super(); 019 this.op = op; 020 this.arg = arg; 021 } 022 023 public JsExpression getArg() { 024 return arg; 025 } 026 027 public JsUnaryOperator getOperator() { 028 return op; 029 } 030 031 public void setArg(JsExpression arg) { 032 this.arg = arg; 033 } 034 035 @Override 036 public void acceptChildren(JsVisitor visitor) { 037 if (op.isModifying()) { 038 // The delete operator is practically like an assignment of undefined, so 039 // for practical purposes we're treating it as an lvalue. 040 visitor.acceptLvalue(arg); 041 } 042 else { 043 visitor.accept(arg); 044 } 045 } 046 }