Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: compiler/java/com/google/dart/compiler/backend/js/ast/JsBinaryOperator.java

Issue 9479013: Remove backends. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: More clean up Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 package com.google.dart.compiler.backend.js.ast;
6
7 /**
8 * Represents the operator in a JavaScript binary operation.
9 */
10 public enum JsBinaryOperator implements JsOperator {
11
12 /*
13 * Precedence indices from "JavaScript - The Definitive Guide" 4th Edition
14 * (page 57)
15 *
16 *
17 * Precedence 15 is for really important things that have their own AST
18 * classes.
19 *
20 * Precedence 14 is for unary operators.
21 */
22
23 MUL("*", 13, LEFT | INFIX), DIV("/", 13, LEFT | INFIX), MOD("%", 13, LEFT
24 | INFIX),
25
26 ADD("+", 12, LEFT | INFIX), SUB("-", 12, LEFT | INFIX),
27
28 SHL("<<", 11, LEFT | INFIX), SHR(">>", 11, LEFT | INFIX), SHRU(">>>", 11,
29 LEFT | INFIX),
30
31 LT("<", 10, LEFT | INFIX), LTE("<=", 10, LEFT | INFIX), GT(">", 10, LEFT
32 | INFIX), GTE(">=", 10, LEFT | INFIX), INSTANCEOF("instanceof", 10, LEFT
33 | INFIX), INOP("in", 10, LEFT | INFIX),
34
35 EQ("==", 9, LEFT | INFIX), NEQ("!=", 9, LEFT | INFIX), REF_EQ("===", 9, LEFT
36 | INFIX), REF_NEQ("!==", 9, LEFT | INFIX),
37
38 BIT_AND("&", 8, LEFT | INFIX),
39
40 BIT_XOR("^", 7, LEFT | INFIX),
41
42 BIT_OR("|", 6, LEFT | INFIX),
43
44 AND("&&", 5, LEFT | INFIX),
45
46 OR("||", 4, LEFT | INFIX),
47
48 // Precedence 3 is for the condition operator.
49
50 // These assignment operators are right-associative.
51 ASG("=", 2, INFIX), ASG_ADD("+=", 2, INFIX), ASG_SUB("-=", 2, INFIX), ASG_MUL(
52 "*=", 2, INFIX), ASG_DIV("/=", 2, INFIX), ASG_MOD("%=", 2, INFIX), ASG_SHL (
53 "<<=", 2, INFIX), ASG_SHR(">>=", 2, INFIX), ASG_SHRU(">>>=", 2, INFIX), AS G_BIT_AND(
54 "&=", 2, INFIX), ASG_BIT_OR("|=", 2, INFIX), ASG_BIT_XOR("^=", 2, INFIX),
55
56 COMMA(",", 1, LEFT | INFIX);
57
58 private final int mask;
59 private final int precedence;
60 private final String symbol;
61
62 private JsBinaryOperator(String symbol, int precedence, int mask) {
63 this.symbol = symbol;
64 this.precedence = precedence;
65 this.mask = mask;
66 }
67
68 @Override
69 public int getPrecedence() {
70 return precedence;
71 }
72
73 @Override
74 public String getSymbol() {
75 return symbol;
76 }
77
78 public boolean isAssignment() {
79 /*
80 * Beware, flaky! Maybe I should have added Yet Another Field to
81 * BinaryOperator?
82 */
83 return (getPrecedence() == ASG.getPrecedence());
84 }
85
86 @Override
87 public boolean isKeyword() {
88 return this == INSTANCEOF || this == INOP;
89 }
90
91 @Override
92 public boolean isLeftAssociative() {
93 return (mask & LEFT) != 0;
94 }
95
96 @Override
97 public boolean isPrecedenceLessThan(JsOperator other) {
98 return precedence < other.getPrecedence();
99 }
100
101 @Override
102 public boolean isValidInfix() {
103 return (mask & INFIX) != 0;
104 }
105
106 @Override
107 public boolean isValidPostfix() {
108 return (mask & POSTFIX) != 0;
109 }
110
111 @Override
112 public boolean isValidPrefix() {
113 return (mask & PREFIX) != 0;
114 }
115
116 @Override
117 public String toString() {
118 return symbol;
119 }
120 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698