001: /*
002: * Copyright 1994-2003 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package sun.tools.tree;
027:
028: import sun.tools.java.*;
029: import java.util.Hashtable;
030:
031: /**
032: * Parenthesised expressions.
033: *
034: * WARNING: The contents of this source file are not part of any
035: * supported API. Code that depends on them does so at its own risk:
036: * they are subject to change or removal without notice.
037: */
038:
039: public class ExprExpression extends UnaryExpression {
040: /**
041: * Constructor
042: */
043: public ExprExpression(long where, Expression right) {
044: super (EXPR, where, right.type, right);
045: }
046:
047: /**
048: * Check a condition. We must pass it on to our unparenthesised form.
049: */
050: public void checkCondition(Environment env, Context ctx, Vset vset,
051: Hashtable exp, ConditionVars cvars) {
052: right.checkCondition(env, ctx, vset, exp, cvars);
053: type = right.type;
054: }
055:
056: /**
057: * Check the expression if it appears as an lvalue.
058: * We just pass it on to our unparenthesized subexpression.
059: * (Part of fix for 4090372)
060: */
061: public Vset checkAssignOp(Environment env, Context ctx, Vset vset,
062: Hashtable exp, Expression outside) {
063: vset = right.checkAssignOp(env, ctx, vset, exp, outside);
064: type = right.type;
065: return vset;
066: }
067:
068: /**
069: * Delegate to our subexpression.
070: * (Part of fix for 4090372)
071: */
072: public FieldUpdater getUpdater(Environment env, Context ctx) {
073: return right.getUpdater(env, ctx);
074: }
075:
076: // Allow (x) = 9;
077: //
078: // I will hold off on this until I'm sure about it. Nobody's
079: // going to clammer for this one.
080: //
081: // public Vset checkLHS(Environment env, Context ctx,
082: // Vset vset, Hashtable exp) {
083: // vset = right.check(env, ctx, vset, exp);
084: // type = right.type;
085: // return vset;
086: // }
087:
088: public boolean isNull() {
089: return right.isNull();
090: }
091:
092: public boolean isNonNull() {
093: return right.isNonNull();
094: }
095:
096: // Probably not necessary
097: public Object getValue() {
098: return right.getValue();
099: }
100:
101: /**
102: * Delegate to our subexpression.
103: * See the comment in AddExpression#inlineValueSB() for
104: * information about this method.
105: */
106: protected StringBuffer inlineValueSB(Environment env, Context ctx,
107: StringBuffer buffer) {
108: return right.inlineValueSB(env, ctx, buffer);
109: }
110:
111: /**
112: * Select the type of the expression
113: */
114: void selectType(Environment env, Context ctx, int tm) {
115: type = right.type;
116: }
117:
118: /**
119: * Simplify
120: */
121: Expression simplify() {
122: return right;
123: }
124: }
|