KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > google > gwt > dev > js > ast > JsBinaryOperator


1 /*
2  * Copyright 2007 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */

16 package com.google.gwt.dev.js.ast;
17
18 /**
19  * Represents the operator in a JavaScript binary operation.
20  */

21 public final class JsBinaryOperator extends JsOperator {
22
23   // Precedence indices from "JavaScript - The Definitive Guide" 4th Edition
24
// (page 57)
25
//
26

27   // Precendence 15 is for really important things that have their own AST
28
// classes.
29

30   // Precendence 14 is for unary operators.
31

32   private static final int LEFT_INFIX = LEFT | INFIX;
33   public static final JsBinaryOperator MUL = create("*", 13, LEFT_INFIX);
34   public static final JsBinaryOperator DIV = create("/", 13, LEFT_INFIX);
35   public static final JsBinaryOperator MOD = create("%", 13, LEFT_INFIX);
36
37   public static final JsBinaryOperator ADD = create("+", 12, LEFT_INFIX);
38   public static final JsBinaryOperator SUB = create("-", 12, LEFT_INFIX);
39
40   public static final JsBinaryOperator SHL = create("<<", 11, LEFT_INFIX);
41   public static final JsBinaryOperator SHR = create(">>", 11, LEFT_INFIX);
42   public static final JsBinaryOperator SHRU = create(">>>", 11, LEFT_INFIX);
43
44   public static final JsBinaryOperator LT = create("<", 10, LEFT_INFIX);
45   public static final JsBinaryOperator LTE = create("<=", 10, LEFT_INFIX);
46   public static final JsBinaryOperator GT = create(">", 10, LEFT_INFIX);
47   public static final JsBinaryOperator GTE = create(">=", 10, LEFT_INFIX);
48   public static final JsBinaryOperator INSTANCEOF = create("instanceof", 10,
49       LEFT_INFIX);
50   public static final JsBinaryOperator INOP = create("in", 10, LEFT_INFIX);
51
52   public static final JsBinaryOperator EQ = create("==", 9, LEFT_INFIX);
53   public static final JsBinaryOperator NEQ = create("!=", 9, LEFT_INFIX);
54   public static final JsBinaryOperator REF_EQ = create("===", 9, LEFT_INFIX);
55   public static final JsBinaryOperator REF_NEQ = create("!==", 9, LEFT_INFIX);
56
57   public static final JsBinaryOperator BIT_AND = create("&", 8, LEFT_INFIX);
58
59   public static final JsBinaryOperator BIT_XOR = create("^", 7, LEFT_INFIX);
60
61   public static final JsBinaryOperator BIT_OR = create("|", 6, LEFT_INFIX);
62
63   public static final JsBinaryOperator AND = create("&&", 5, LEFT_INFIX);
64
65   public static final JsBinaryOperator OR = create("||", 4, LEFT_INFIX);
66
67   // Precendence 3 is for the condition operator.
68

69   // These assignment operators are right-associatve.
70
public static final JsBinaryOperator ASG = create("=", 2, INFIX);
71   public static final JsBinaryOperator ASG_ADD = create("+=", 2, INFIX);
72   public static final JsBinaryOperator ASG_SUB = create("-=", 2, INFIX);
73   public static final JsBinaryOperator ASG_MUL = create("*=", 2, INFIX);
74   public static final JsBinaryOperator ASG_DIV = create("/=", 2, INFIX);
75   public static final JsBinaryOperator ASG_MOD = create("%=", 2, INFIX);
76   public static final JsBinaryOperator ASG_SHL = create("<<=", 2, INFIX);
77   public static final JsBinaryOperator ASG_SHR = create(">>=", 2, INFIX);
78   public static final JsBinaryOperator ASG_SHRU = create(">>>=", 2, INFIX);
79   public static final JsBinaryOperator ASG_BIT_AND = create("&=", 2, INFIX);
80   public static final JsBinaryOperator ASG_BIT_OR = create("|=", 2, INFIX);
81   public static final JsBinaryOperator ASG_BIT_XOR = create("^=", 2, INFIX);
82
83   public static final JsBinaryOperator COMMA = create(",", 1, LEFT_INFIX);
84
85   private static JsBinaryOperator create(String JavaDoc symbol, int precedence, int mask) {
86     JsBinaryOperator op = new JsBinaryOperator(symbol, precedence, mask);
87     return op;
88   }
89
90   private JsBinaryOperator(String JavaDoc symbol, int precedence, int mask) {
91     super(symbol, precedence, mask);
92   }
93
94   public boolean isAssignment() {
95     /*
96      * Beware, flaky! Maybe I should have added Yet Another Field to
97      * BinaryOperator?
98      */

99     return (getPrecedence() == ASG.getPrecedence());
100   }
101
102   public boolean isKeyword() {
103     return this == INSTANCEOF || this == INOP;
104   }
105
106 }
107
Popular Tags