org.mozilla.javascript.Token Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of js Show documentation
Show all versions of js Show documentation
Rhino is an open-source implementation of JavaScript written entirely in Java. It is typically embedded into Java applications to provide scripting to end users.
The newest version!
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1997-1999
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Roger Lawrence
* Mike McCabe
* Igor Bukanov
* Bob Jervis
* Milen Nankov
*
* Alternatively, the contents of this file may be used under the terms of
* the GNU General Public License Version 2 or later (the "GPL"), in which
* case the provisions of the GPL are applicable instead of those above. If
* you wish to allow use of your version of this file only under the terms of
* the GPL and not to allow others to use your version of this file under the
* MPL, indicate your decision by deleting the provisions above and replacing
* them with the notice and other provisions required by the GPL. If you do
* not delete the provisions above, a recipient may use your version of this
* file under either the MPL or the GPL.
*
* ***** END LICENSE BLOCK ***** */
package org.mozilla.javascript;
/**
* This class implements the JavaScript scanner.
*
* It is based on the C source files jsscan.c and jsscan.h
* in the jsref package.
*
* @see org.mozilla.javascript.Parser
*
* @author Mike McCabe
* @author Brendan Eich
*/
public class Token
{
// debug flags
public static final boolean printTrees = false;
static final boolean printICode = false;
static final boolean printNames = printTrees || printICode;
/**
* Token types. These values correspond to JSTokenType values in
* jsscan.c.
*/
public final static int
// start enum
ERROR = -1, // well-known as the only code < EOF
EOF = 0, // end of file token - (not EOF_CHAR)
EOL = 1, // end of line
// Interpreter reuses the following as bytecodes
FIRST_BYTECODE_TOKEN = 2,
ENTERWITH = 2,
LEAVEWITH = 3,
RETURN = 4,
GOTO = 5,
IFEQ = 6,
IFNE = 7,
SETNAME = 8,
BITOR = 9,
BITXOR = 10,
BITAND = 11,
EQ = 12,
NE = 13,
LT = 14,
LE = 15,
GT = 16,
GE = 17,
LSH = 18,
RSH = 19,
URSH = 20,
ADD = 21,
SUB = 22,
MUL = 23,
DIV = 24,
MOD = 25,
NOT = 26,
BITNOT = 27,
POS = 28,
NEG = 29,
NEW = 30,
DELPROP = 31,
TYPEOF = 32,
GETPROP = 33,
GETPROPNOWARN = 34,
SETPROP = 35,
GETELEM = 36,
SETELEM = 37,
CALL = 38,
NAME = 39,
NUMBER = 40,
STRING = 41,
NULL = 42,
THIS = 43,
FALSE = 44,
TRUE = 45,
SHEQ = 46, // shallow equality (===)
SHNE = 47, // shallow inequality (!==)
REGEXP = 48,
BINDNAME = 49,
THROW = 50,
RETHROW = 51, // rethrow caught exception: catch (e if ) use it
IN = 52,
INSTANCEOF = 53,
LOCAL_LOAD = 54,
GETVAR = 55,
SETVAR = 56,
CATCH_SCOPE = 57,
ENUM_INIT_KEYS = 58,
ENUM_INIT_VALUES = 59,
ENUM_INIT_ARRAY= 60,
ENUM_NEXT = 61,
ENUM_ID = 62,
THISFN = 63,
RETURN_RESULT = 64, // to return previously stored return result
ARRAYLIT = 65, // array literal
OBJECTLIT = 66, // object literal
GET_REF = 67, // *reference
SET_REF = 68, // *reference = something
DEL_REF = 69, // delete reference
REF_CALL = 70, // f(args) = something or f(args)++
REF_SPECIAL = 71, // reference for special properties like __proto
YIELD = 72, // JS 1.7 yield pseudo keyword
// For XML support:
DEFAULTNAMESPACE = 73, // default xml namespace =
ESCXMLATTR = 74,
ESCXMLTEXT = 75,
REF_MEMBER = 76, // Reference for x.@y, x..y etc.
REF_NS_MEMBER = 77, // Reference for x.ns::y, x..ns::y etc.
REF_NAME = 78, // Reference for @y, @[y] etc.
REF_NS_NAME = 79; // Reference for ns::y, @ns::y@[y] etc.
// End of interpreter bytecodes
public final static int
LAST_BYTECODE_TOKEN = REF_NS_NAME,
TRY = 80,
SEMI = 81, // semicolon
LB = 82, // left and right brackets
RB = 83,
LC = 84, // left and right curlies (braces)
RC = 85,
LP = 86, // left and right parentheses
RP = 87,
COMMA = 88, // comma operator
ASSIGN = 89, // simple assignment (=)
ASSIGN_BITOR = 90, // |=
ASSIGN_BITXOR = 91, // ^=
ASSIGN_BITAND = 92, // |=
ASSIGN_LSH = 93, // <<=
ASSIGN_RSH = 94, // >>=
ASSIGN_URSH = 95, // >>>=
ASSIGN_ADD = 96, // +=
ASSIGN_SUB = 97, // -=
ASSIGN_MUL = 98, // *=
ASSIGN_DIV = 99, // /=
ASSIGN_MOD = 100; // %=
public final static int
FIRST_ASSIGN = ASSIGN,
LAST_ASSIGN = ASSIGN_MOD,
HOOK = 101, // conditional (?:)
COLON = 102,
OR = 103, // logical or (||)
AND = 104, // logical and (&&)
INC = 105, // increment/decrement (++ --)
DEC = 106,
DOT = 107, // member operator (.)
FUNCTION = 108, // function keyword
EXPORT = 109, // export keyword
IMPORT = 110, // import keyword
IF = 111, // if keyword
ELSE = 112, // else keyword
SWITCH = 113, // switch keyword
CASE = 114, // case keyword
DEFAULT = 115, // default keyword
WHILE = 116, // while keyword
DO = 117, // do keyword
FOR = 118, // for keyword
BREAK = 119, // break keyword
CONTINUE = 120, // continue keyword
VAR = 121, // var keyword
WITH = 122, // with keyword
CATCH = 123, // catch keyword
FINALLY = 124, // finally keyword
VOID = 125, // void keyword
RESERVED = 126, // reserved keywords
EMPTY = 127,
/* types used for the parse tree - these never get returned
* by the scanner.
*/
BLOCK = 128, // statement block
LABEL = 129, // label
TARGET = 130,
LOOP = 131,
EXPR_VOID = 132, // expression statement in functions
EXPR_RESULT = 133, // expression statement in scripts
JSR = 134,
SCRIPT = 135, // top-level node for entire script
TYPEOFNAME = 136, // for typeof(simple-name)
USE_STACK = 137,
SETPROP_OP = 138, // x.y op= something
SETELEM_OP = 139, // x[y] op= something
LOCAL_BLOCK = 140,
SET_REF_OP = 141, // *reference op= something
// For XML support:
DOTDOT = 142, // member operator (..)
COLONCOLON = 143, // namespace::name
XML = 144, // XML type
DOTQUERY = 145, // .() -- e.g., x.emps.emp.(name == "terry")
XMLATTR = 146, // @
XMLEND = 147,
// Optimizer-only-tokens
TO_OBJECT = 148,
TO_DOUBLE = 149,
GET = 150, // JS 1.5 get pseudo keyword
SET = 151, // JS 1.5 set pseudo keyword
LET = 152, // JS 1.7 let pseudo keyword
CONST = 153,
SETCONST = 154,
SETCONSTVAR = 155,
ARRAYCOMP = 156, // array comprehension
LETEXPR = 157,
WITHEXPR = 158,
DEBUGGER = 159,
LAST_TOKEN = 159;
public static String name(int token)
{
if (!printNames) {
return String.valueOf(token);
}
switch (token) {
case ERROR: return "ERROR";
case EOF: return "EOF";
case EOL: return "EOL";
case ENTERWITH: return "ENTERWITH";
case LEAVEWITH: return "LEAVEWITH";
case RETURN: return "RETURN";
case GOTO: return "GOTO";
case IFEQ: return "IFEQ";
case IFNE: return "IFNE";
case SETNAME: return "SETNAME";
case BITOR: return "BITOR";
case BITXOR: return "BITXOR";
case BITAND: return "BITAND";
case EQ: return "EQ";
case NE: return "NE";
case LT: return "LT";
case LE: return "LE";
case GT: return "GT";
case GE: return "GE";
case LSH: return "LSH";
case RSH: return "RSH";
case URSH: return "URSH";
case ADD: return "ADD";
case SUB: return "SUB";
case MUL: return "MUL";
case DIV: return "DIV";
case MOD: return "MOD";
case NOT: return "NOT";
case BITNOT: return "BITNOT";
case POS: return "POS";
case NEG: return "NEG";
case NEW: return "NEW";
case DELPROP: return "DELPROP";
case TYPEOF: return "TYPEOF";
case GETPROP: return "GETPROP";
case GETPROPNOWARN: return "GETPROPNOWARN";
case SETPROP: return "SETPROP";
case GETELEM: return "GETELEM";
case SETELEM: return "SETELEM";
case CALL: return "CALL";
case NAME: return "NAME";
case NUMBER: return "NUMBER";
case STRING: return "STRING";
case NULL: return "NULL";
case THIS: return "THIS";
case FALSE: return "FALSE";
case TRUE: return "TRUE";
case SHEQ: return "SHEQ";
case SHNE: return "SHNE";
case REGEXP: return "OBJECT";
case BINDNAME: return "BINDNAME";
case THROW: return "THROW";
case RETHROW: return "RETHROW";
case IN: return "IN";
case INSTANCEOF: return "INSTANCEOF";
case LOCAL_LOAD: return "LOCAL_LOAD";
case GETVAR: return "GETVAR";
case SETVAR: return "SETVAR";
case CATCH_SCOPE: return "CATCH_SCOPE";
case ENUM_INIT_KEYS: return "ENUM_INIT_KEYS";
case ENUM_INIT_VALUES:return "ENUM_INIT_VALUES";
case ENUM_INIT_ARRAY: return "ENUM_INIT_ARRAY";
case ENUM_NEXT: return "ENUM_NEXT";
case ENUM_ID: return "ENUM_ID";
case THISFN: return "THISFN";
case RETURN_RESULT: return "RETURN_RESULT";
case ARRAYLIT: return "ARRAYLIT";
case OBJECTLIT: return "OBJECTLIT";
case GET_REF: return "GET_REF";
case SET_REF: return "SET_REF";
case DEL_REF: return "DEL_REF";
case REF_CALL: return "REF_CALL";
case REF_SPECIAL: return "REF_SPECIAL";
case DEFAULTNAMESPACE:return "DEFAULTNAMESPACE";
case ESCXMLTEXT: return "ESCXMLTEXT";
case ESCXMLATTR: return "ESCXMLATTR";
case REF_MEMBER: return "REF_MEMBER";
case REF_NS_MEMBER: return "REF_NS_MEMBER";
case REF_NAME: return "REF_NAME";
case REF_NS_NAME: return "REF_NS_NAME";
case TRY: return "TRY";
case SEMI: return "SEMI";
case LB: return "LB";
case RB: return "RB";
case LC: return "LC";
case RC: return "RC";
case LP: return "LP";
case RP: return "RP";
case COMMA: return "COMMA";
case ASSIGN: return "ASSIGN";
case ASSIGN_BITOR: return "ASSIGN_BITOR";
case ASSIGN_BITXOR: return "ASSIGN_BITXOR";
case ASSIGN_BITAND: return "ASSIGN_BITAND";
case ASSIGN_LSH: return "ASSIGN_LSH";
case ASSIGN_RSH: return "ASSIGN_RSH";
case ASSIGN_URSH: return "ASSIGN_URSH";
case ASSIGN_ADD: return "ASSIGN_ADD";
case ASSIGN_SUB: return "ASSIGN_SUB";
case ASSIGN_MUL: return "ASSIGN_MUL";
case ASSIGN_DIV: return "ASSIGN_DIV";
case ASSIGN_MOD: return "ASSIGN_MOD";
case HOOK: return "HOOK";
case COLON: return "COLON";
case OR: return "OR";
case AND: return "AND";
case INC: return "INC";
case DEC: return "DEC";
case DOT: return "DOT";
case FUNCTION: return "FUNCTION";
case EXPORT: return "EXPORT";
case IMPORT: return "IMPORT";
case IF: return "IF";
case ELSE: return "ELSE";
case SWITCH: return "SWITCH";
case CASE: return "CASE";
case DEFAULT: return "DEFAULT";
case WHILE: return "WHILE";
case DO: return "DO";
case FOR: return "FOR";
case BREAK: return "BREAK";
case CONTINUE: return "CONTINUE";
case VAR: return "VAR";
case WITH: return "WITH";
case CATCH: return "CATCH";
case FINALLY: return "FINALLY";
case VOID: return "VOID";
case RESERVED: return "RESERVED";
case EMPTY: return "EMPTY";
case BLOCK: return "BLOCK";
case LABEL: return "LABEL";
case TARGET: return "TARGET";
case LOOP: return "LOOP";
case EXPR_VOID: return "EXPR_VOID";
case EXPR_RESULT: return "EXPR_RESULT";
case JSR: return "JSR";
case SCRIPT: return "SCRIPT";
case TYPEOFNAME: return "TYPEOFNAME";
case USE_STACK: return "USE_STACK";
case SETPROP_OP: return "SETPROP_OP";
case SETELEM_OP: return "SETELEM_OP";
case LOCAL_BLOCK: return "LOCAL_BLOCK";
case SET_REF_OP: return "SET_REF_OP";
case DOTDOT: return "DOTDOT";
case COLONCOLON: return "COLONCOLON";
case XML: return "XML";
case DOTQUERY: return "DOTQUERY";
case XMLATTR: return "XMLATTR";
case XMLEND: return "XMLEND";
case TO_OBJECT: return "TO_OBJECT";
case TO_DOUBLE: return "TO_DOUBLE";
case GET: return "GET";
case SET: return "SET";
case LET: return "LET";
case YIELD: return "YIELD";
case CONST: return "CONST";
case SETCONST: return "SETCONST";
case ARRAYCOMP: return "ARRAYCOMP";
case WITHEXPR: return "WITHEXPR";
case LETEXPR: return "LETEXPR";
case DEBUGGER: return "DEBUGGER";
}
// Token without name
throw new IllegalStateException(String.valueOf(token));
}
}