001: /*
002: * $Id: Node.java,v 1.39 2002/09/16 08:05:05 jkl Exp $
003: *
004: * Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
005: *
006: * Use is subject to license terms, as defined in
007: * Anvil Sofware License, Version 1.1. See LICENSE
008: * file, or http://njet.org/license-1.1.txt
009: */
010: package anvil.script.expression;
011:
012: import anvil.core.Any;
013: import anvil.ErrorListener;
014: import anvil.codec.Code;
015: import anvil.script.compiler.ByteCompiler;
016: import anvil.script.Context;
017: import anvil.script.Type;
018: import java.io.IOException;
019:
020: /**
021: * class Node
022: *
023: * @author: Jani Lehtimäki
024: */
025: public class Node {
026:
027: public static final int GET = 0;
028: public static final int GET_BOOLEAN = 1;
029: public static final int CHECK = 2;
030: public static final int DELETE = 3;
031: public static final int GET_TYPE = 4;
032: public static final int GET_REF = 5;
033:
034: static final public int NONE = 0;
035: static final public int EXPR_ADD = 100;
036: static final public int EXPR_AND = 101;
037: static final public int EXPR_ARRAY = 102;
038: static final public int EXPR_ASSIGN = 103;
039: static final public int EXPR_ASSIGN_ADD = 104;
040: static final public int EXPR_ASSIGN_CONCAT = 105;
041: static final public int EXPR_ASSIGN_DIVIDE = 106;
042: static final public int EXPR_ASSIGN_MODULO = 107;
043: static final public int EXPR_ASSIGN_MULTIPLY = 108;
044: static final public int EXPR_ASSIGN_SUBTRACT = 109;
045: static final public int EXPR_ATTRIBUTE = 110;
046: static final public int EXPR_BOOLEAN_CAST = 111;
047: static final public int EXPR_CALL = 112;
048: static final public int EXPR_CLASSOF = 113;
049: static final public int EXPR_CLONE = 114;
050: static final public int EXPR_COMPARE = 115;
051: static final public int EXPR_COMPARISON_CHAIN = 116;
052: static final public int EXPR_CONCATENATION = 117;
053: static final public int EXPR_CONDITIONAL = 118;
054: static final public int EXPR_CONSTANT = 119;
055: static final public int EXPR_CONSTANT_VARIABLE = 120;
056: static final public int EXPR_COPY = 121;
057: static final public int EXPR_DEFINED = 122;
058: static final public int EXPR_DELETE = 123;
059: static final public int EXPR_DIVIDE = 124;
060: static final public int EXPR_EMPTY_REFERENCE = 125;
061: static final public int EXPR_EQUAL = 126;
062: static final public int EXPR_EXACT_EQUAL = 127;
063: static final public int EXPR_EXACT_NOT_EQUAL = 128;
064: static final public int EXPR_FLOAT_CAST = 129;
065: static final public int EXPR_GREATER = 130;
066: static final public int EXPR_GREATER_EQUAL = 131;
067: static final public int EXPR_HAS = 132;
068: static final public int EXPR_IMPORT = 133;
069: static final public int EXPR_IN = 134;
070: static final public int EXPR_INT_CAST = 135;
071: static final public int EXPR_INVOKE = 136;
072: static final public int EXPR_IS = 137;
073: static final public int EXPR_LESS = 138;
074: static final public int EXPR_LESS_EQUAL = 139;
075: static final public int EXPR_LINK = 140;
076: static final public int EXPR_LIST = 141;
077: static final public int EXPR_MAPPING = 142;
078: static final public int EXPR_MATCH = 143;
079: static final public int EXPR_MODULO = 144;
080: static final public int EXPR_MULTIPLY = 145;
081: static final public int EXPR_NAMED = 146;
082: static final public int EXPR_NAMESPACE = 147;
083: static final public int EXPR_NEW = 148;
084: static final public int EXPR_NOT = 149;
085: static final public int EXPR_NOT_EQUAL = 150;
086: static final public int EXPR_NO_MATCH = 151;
087: static final public int EXPR_OR = 152;
088: static final public int EXPR_POSTFIX_DECREMENT = 153;
089: static final public int EXPR_POSTFIX_INCREMENT = 154;
090: static final public int EXPR_PREFIX_DECREMENT = 155;
091: static final public int EXPR_PREFIX_INCREMENT = 156;
092: static final public int EXPR_RANGE = 157;
093: static final public int EXPR_REFERENCE = 158;
094: static final public int EXPR_SELECT = 159;
095: static final public int EXPR_SIZEOF = 160;
096: static final public int EXPR_SPLICE = 161;
097: static final public int EXPR_STRING_BUFFER = 162;
098: static final public int EXPR_STRING_CAST = 163;
099: static final public int EXPR_SUBTRACT = 164;
100: static final public int EXPR_SYMBOL = 165;
101: static final public int EXPR_THIS = 166;
102: static final public int EXPR_TYPE = 167;
103: static final public int EXPR_TYPEOF = 168;
104: static final public int EXPR_UNARY_MINUS = 169;
105: static final public int EXPR_UNARY_PLUS = 170;
106: static final public int EXPR_VARIABLE = 171;
107: static final public int EXPR_XOR = 172;
108: static final public int EXPR_THUNK = 173;
109: static final public int EXPR_FOREACH = 174;
110: static final public int EXPR_ASSIGN_INIT = 175;
111:
112: public Node() {
113: }
114:
115: public int typeOf() {
116: return NONE;
117: }
118:
119: public boolean isConstant() {
120: return false;
121: }
122:
123: public boolean needLineNumbers() {
124: switch (typeOf()) {
125: case EXPR_TYPE:
126: case EXPR_DEFINED:
127: case EXPR_DELETE:
128: case EXPR_ATTRIBUTE:
129: case EXPR_EMPTY_REFERENCE:
130: case EXPR_REFERENCE:
131: case EXPR_IMPORT:
132: case EXPR_CALL:
133: case EXPR_INVOKE:
134: case EXPR_NEW:
135: case EXPR_THIS:
136: case EXPR_VARIABLE:
137: case EXPR_ASSIGN:
138: case EXPR_ASSIGN_INIT:
139: case EXPR_ASSIGN_ADD:
140: case EXPR_ASSIGN_SUBTRACT:
141: case EXPR_ASSIGN_MULTIPLY:
142: case EXPR_ASSIGN_DIVIDE:
143: case EXPR_ASSIGN_MODULO:
144: case EXPR_ASSIGN_CONCAT:
145: return true;
146: default:
147: return false;
148: }
149: }
150:
151: public boolean isStandalone() {
152: switch (typeOf()) {
153: case EXPR_ASSIGN:
154: case EXPR_ASSIGN_INIT:
155: case EXPR_ASSIGN_ADD:
156: case EXPR_ASSIGN_SUBTRACT:
157: case EXPR_ASSIGN_MULTIPLY:
158: case EXPR_ASSIGN_DIVIDE:
159: case EXPR_ASSIGN_MODULO:
160: case EXPR_ASSIGN_CONCAT:
161: case EXPR_INVOKE:
162: case EXPR_CALL:
163: case EXPR_DELETE:
164: case EXPR_PREFIX_DECREMENT:
165: case EXPR_PREFIX_INCREMENT:
166: case EXPR_POSTFIX_DECREMENT:
167: case EXPR_POSTFIX_INCREMENT:
168: case EXPR_NEW:
169: return true;
170:
171: default:
172: return false;
173: }
174: }
175:
176: public boolean isAssignable() {
177: switch (typeOf()) {
178: case EXPR_EMPTY_REFERENCE:
179: case EXPR_REFERENCE:
180: case EXPR_ATTRIBUTE:
181: case EXPR_VARIABLE:
182: return true;
183: default:
184: return false;
185: }
186: }
187:
188: public boolean isUpdatable() {
189: switch (typeOf()) {
190: case EXPR_REFERENCE:
191: case EXPR_ATTRIBUTE:
192: case EXPR_VARIABLE:
193: return true;
194: default:
195: return false;
196: }
197: }
198:
199: public Node optimize() {
200: return this ;
201: }
202:
203: public void check(ErrorListener context) {
204: }
205:
206: public Any eval() {
207: throw new RuntimeException("Node of type '"
208: + getClass().getName() + "' is not a constant");
209: }
210:
211: public String toString() {
212: String s = getClass().getName();
213: s = s.substring(s.lastIndexOf('.') + 1);
214: return s;
215: }
216:
217: public void compile(ByteCompiler context, int operation) {
218: }
219:
220: public void compile(ByteCompiler context, Node child) {
221: }
222:
223: }
|