1/*
2 * Javassist, a Java-bytecode translator toolkit.
3 * Copyright (C) 1999-2007 Shigeru Chiba. All Rights Reserved.
4 *
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License.  Alternatively, the contents of this file may be used under
8 * the terms of the GNU Lesser General Public License Version 2.1 or later.
9 *
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
13 * License.
14 */
15
16package javassist.compiler.ast;
17
18import javassist.compiler.TokenId;
19import javassist.compiler.CompileError;
20
21/**
22 * Expression.
23 */
24public class Expr extends ASTList implements TokenId {
25    /* operator must be either of:
26     * (unary) +, (unary) -, ++, --, !, ~,
27     * ARRAY, . (dot), MEMBER (static member access).
28     * Otherwise, the object should be an instance of a subclass.
29     */
30
31    protected int operatorId;
32
33    Expr(int op, ASTree _head, ASTList _tail) {
34        super(_head, _tail);
35        operatorId = op;
36    }
37
38    Expr(int op, ASTree _head) {
39        super(_head);
40        operatorId = op;
41    }
42
43    public static Expr make(int op, ASTree oprand1, ASTree oprand2) {
44        return new Expr(op, oprand1, new ASTList(oprand2));
45    }
46
47    public static Expr make(int op, ASTree oprand1) {
48        return new Expr(op, oprand1);
49    }
50
51    public int getOperator() { return operatorId; }
52
53    public void setOperator(int op) { operatorId = op; }
54
55    public ASTree oprand1() { return getLeft(); }
56
57    public void setOprand1(ASTree expr) {
58        setLeft(expr);
59    }
60
61    public ASTree oprand2() { return getRight().getLeft(); }
62
63    public void setOprand2(ASTree expr) {
64        getRight().setLeft(expr);
65    }
66
67    public void accept(Visitor v) throws CompileError { v.atExpr(this); }
68
69    public String getName() {
70        int id = operatorId;
71        if (id < 128)
72            return String.valueOf((char)id);
73        else if (NEQ <= id && id <= ARSHIFT_E)
74            return opNames[id - NEQ];
75        else if (id == INSTANCEOF)
76            return "instanceof";
77        else
78            return String.valueOf(id);
79    }
80
81    protected String getTag() {
82        return "op:" + getName();
83    }
84}
85