From ebe60fb675f82225e13654191a9cba6c88d1f192 Mon Sep 17 00:00:00 2001 From: "igor%mir2.org" Date: Tue, 22 Jul 2003 11:16:54 +0000 Subject: [PATCH] Move ENDTRY, JTHROW, GOSUB and RETSUB from TokenStream to Interpreter as they specific only to Interpreter implementation. --- .../org/mozilla/javascript/Interpreter.java | 43 +++-- .../org/mozilla/javascript/TokenStream.java | 171 +++++++++--------- 2 files changed, 108 insertions(+), 106 deletions(-) diff --git a/js/rhino/src/org/mozilla/javascript/Interpreter.java b/js/rhino/src/org/mozilla/javascript/Interpreter.java index 9ee06c2a24bb..da895caad784 100644 --- a/js/rhino/src/org/mozilla/javascript/Interpreter.java +++ b/js/rhino/src/org/mozilla/javascript/Interpreter.java @@ -57,8 +57,14 @@ public class Interpreter { // To return undefined value RETURN_UNDEF_ICODE = TokenStream.LAST_TOKEN + 5, + // Exception handling implementation + ENDTRY = TokenStream.LAST_TOKEN + 6, + JTHROW = TokenStream.LAST_TOKEN + 7, + GOSUB = TokenStream.LAST_TOKEN + 8, + RETSUB = TokenStream.LAST_TOKEN + 9, + // Last icode - END_ICODE = TokenStream.LAST_TOKEN + 6; + END_ICODE = TokenStream.LAST_TOKEN + 10; public IRFactory createIRFactory(Context cx, TokenStream ts) @@ -462,7 +468,7 @@ public class Interpreter { case TokenStream.USELOCAL : { if (node.getProp(Node.TARGET_PROP) != null) { - iCodeTop = addByte(TokenStream.RETSUB, iCodeTop); + iCodeTop = addByte(RETSUB, iCodeTop); } else { iCodeTop = addByte(TokenStream.USETEMP, iCodeTop); itsStackDepth++; @@ -513,7 +519,7 @@ public class Interpreter { // of pending trys and have some knowledge of how // many trys we need to close when we perform a // GOTO or GOSUB. - iCodeTop = addGoto(target, TokenStream.GOSUB, iCodeTop); + iCodeTop = addGoto(target, GOSUB, iCodeTop); break; } @@ -869,7 +875,7 @@ public class Interpreter { (nextSibling == catchTarget || nextSibling == finallyTarget)) { - iCodeTop = addByte(TokenStream.ENDTRY, iCodeTop); + iCodeTop = addByte(ENDTRY, iCodeTop); insertedEndTry = true; } if (child == catchTarget) { @@ -889,9 +895,8 @@ public class Interpreter { recordJumpOffset(tryStart + 3, finallyOffset); // Stack depth is handled during generation of // finallyTarget - iCodeTop = addGoto(finallyTarget, TokenStream.GOSUB, - iCodeTop); - iCodeTop = addByte(TokenStream.JTHROW, iCodeTop); + iCodeTop = addGoto(finallyTarget, GOSUB, iCodeTop); + iCodeTop = addByte(JTHROW, iCodeTop); resolveForwardGoto(skippyJumpStart, iCodeTop); } itsTryDepth--; @@ -1193,6 +1198,10 @@ public class Interpreter { case SHORTNUMBER_ICODE: return "shortnumber"; case INTNUMBER_ICODE: return "intnumber"; case RETURN_UNDEF_ICODE: return "return_undef"; + case ENDTRY: return "endtry"; + case JTHROW: return "jthrow"; + case GOSUB: return "gosub"; + case RETSUB: return "retsub"; case END_ICODE: return "end"; } } @@ -1226,7 +1235,7 @@ public class Interpreter { out.println(tname); break; - case TokenStream.GOSUB : + case GOSUB : case TokenStream.GOTO : case TokenStream.IFEQ : case TokenStream.IFNE : { @@ -1247,7 +1256,7 @@ public class Interpreter { pc += 4; break; } - case TokenStream.RETSUB : + case RETSUB : case TokenStream.ENUMINIT : case TokenStream.ENUMNEXT : case TokenStream.VARINC : @@ -1357,10 +1366,10 @@ public class Interpreter { case TokenStream.ENTERWITH : case TokenStream.LEAVEWITH : case TokenStream.RETURN : - case TokenStream.ENDTRY : + case ENDTRY : case TokenStream.CATCH: case TokenStream.THROW : - case TokenStream.JTHROW : + case JTHROW : case TokenStream.GETTHIS : case TokenStream.SETELEM : case TokenStream.GETELEM : @@ -1410,7 +1419,7 @@ public class Interpreter { case END_ICODE: return 1; - case TokenStream.GOSUB : + case GOSUB : case TokenStream.GOTO : case TokenStream.IFEQ : case TokenStream.IFNE : @@ -1422,7 +1431,7 @@ public class Interpreter { // finally pc offset or 0 return 1 + 2 + 2; - case TokenStream.RETSUB : + case RETSUB : case TokenStream.ENUMINIT : case TokenStream.ENUMNEXT : case TokenStream.VARINC : @@ -1678,7 +1687,7 @@ public class Interpreter { switch (iCode[pc] & 0xff) { // Back indent to ease imlementation reading - case TokenStream.ENDTRY : + case ENDTRY : tryStackTop--; stack[TRY_STACK_SHFT + tryStackTop] = null; break; @@ -1782,7 +1791,7 @@ public class Interpreter { continue Loop; } case TokenStream.THROW: - case TokenStream.JTHROW: { + case JTHROW: { if ((iCode[pc] & 0xff) == TokenStream.THROW) { Object value = stack[stackTop]; if (value == DBL_MRK) value = doubleWrap(sDbl[stackTop]); @@ -1965,7 +1974,7 @@ public class Interpreter { } pcPrevBranch = pc = getTarget(iCode, pc + 1); continue Loop; - case TokenStream.GOSUB : + case GOSUB : sDbl[++stackTop] = pc + 3; if (instructionThreshold != 0) { instructionCount += pc + 3 - pcPrevBranch; @@ -1975,7 +1984,7 @@ public class Interpreter { } } pcPrevBranch = pc = getTarget(iCode, pc + 1); continue Loop; - case TokenStream.RETSUB : { + case RETSUB : { int slot = (iCode[pc + 1] & 0xFF); if (instructionThreshold != 0) { instructionCount += pc + 2 - pcPrevBranch; diff --git a/js/rhino/src/org/mozilla/javascript/TokenStream.java b/js/rhino/src/org/mozilla/javascript/TokenStream.java index 4a2b1d74d941..8ddb385803c6 100644 --- a/js/rhino/src/org/mozilla/javascript/TokenStream.java +++ b/js/rhino/src/org/mozilla/javascript/TokenStream.java @@ -84,8 +84,8 @@ public class TokenStream { ERROR = -1, // well-known as the only code < EOF EOF = 0, // end of file token - (not EOF_CHAR) EOL = 1, // end of line - // Beginning here are interpreter bytecodes. Their values - // must not exceed 127. + + // Beginning here are interpreter bytecodes. POPV = 2, ENTERWITH = 3, LEAVEWITH = 4, @@ -149,70 +149,67 @@ public class TokenStream { THROW = 62, IN = 63, INSTANCEOF = 64, - GOSUB = 65, - RETSUB = 66, - CALLSPECIAL = 67, - GETTHIS = 68, - NEWTEMP = 69, - USETEMP = 70, - GETBASE = 71, - GETVAR = 72, - SETVAR = 73, - UNDEFINED = 74, - TRY = 75, - ENDTRY = 76, - NEWSCOPE = 77, - TYPEOFNAME = 78, - ENUMINIT = 79, - ENUMNEXT = 80, - GETPROTO = 81, - GETPARENT = 82, - SETPROTO = 83, - SETPARENT = 84, - SCOPE = 85, - GETSCOPEPARENT = 86, - THISFN = 87, - JTHROW = 88, + CALLSPECIAL = 65, + GETTHIS = 66, + NEWTEMP = 67, + USETEMP = 68, + GETBASE = 69, + GETVAR = 70, + SETVAR = 71, + UNDEFINED = 72, + TRY = 73, + NEWSCOPE = 74, + TYPEOFNAME = 75, + ENUMINIT = 76, + ENUMNEXT = 77, + GETPROTO = 78, + GETPARENT = 79, + SETPROTO = 80, + SETPARENT = 81, + SCOPE = 82, + GETSCOPEPARENT = 83, + THISFN = 84, + // End of interpreter bytecodes - SEMI = 89, // semicolon - LB = 90, // left and right brackets - RB = 91, - LC = 92, // left and right curlies (braces) - RC = 93, - LP = 94, // left and right parentheses - RP = 95, - COMMA = 96, // comma operator - ASSIGN = 97, // assignment ops (= += -= etc.) - HOOK = 98, // conditional (?:) - COLON = 99, - OR = 100, // logical or (||) - AND = 101, // logical and (&&) - EQOP = 102, // equality ops (== !=) - RELOP = 103, // relational ops (< <= > >=) - SHOP = 104, // shift ops (<< >> >>>) - UNARYOP = 105, // unary prefix operator - INC = 106, // increment/decrement (++ --) - DEC = 107, - DOT = 108, // member operator (.) - PRIMARY = 109, // true, false, null, this - FUNCTION = 110, // function keyword - EXPORT = 111, // export keyword - IMPORT = 112, // import keyword - IF = 113, // if keyword - ELSE = 114, // else keyword - SWITCH = 115, // switch keyword - CASE = 116, // case keyword - DEFAULT = 117, // default keyword - WHILE = 118, // while keyword - DO = 119, // do keyword - FOR = 120, // for keyword - BREAK = 121, // break keyword - CONTINUE = 122, // continue keyword - VAR = 123, // var keyword - WITH = 124, // with keyword - CATCH = 125, // catch keyword - FINALLY = 126, // finally keyword - RESERVED = 127, // reserved keywords + SEMI = 85, // semicolon + LB = 86, // left and right brackets + RB = 87, + LC = 88, // left and right curlies (braces) + RC = 89, + LP = 90, // left and right parentheses + RP = 91, + COMMA = 92, // comma operator + ASSIGN = 93, // assignment ops (= += -= etc.) + HOOK = 94, // conditional (?:) + COLON = 95, + OR = 96, // logical or (||) + AND = 97, // logical and (&&) + EQOP = 98, // equality ops (== !=) + RELOP = 99, // relational ops (< <= > >=) + SHOP = 100, // shift ops (<< >> >>>) + UNARYOP = 101, // unary prefix operator + INC = 102, // increment/decrement (++ --) + DEC = 103, + DOT = 104, // member operator (.) + PRIMARY = 105, // true, false, null, this + FUNCTION = 106, // function keyword + EXPORT = 107, // export keyword + IMPORT = 108, // import keyword + IF = 109, // if keyword + ELSE = 110, // else keyword + SWITCH = 111, // switch keyword + CASE = 112, // case keyword + DEFAULT = 113, // default keyword + WHILE = 114, // while keyword + DO = 115, // do keyword + FOR = 116, // for keyword + BREAK = 117, // break keyword + CONTINUE = 118, // continue keyword + VAR = 119, // var keyword + WITH = 120, // with keyword + CATCH = 121, // catch keyword + FINALLY = 122, // finally keyword + RESERVED = 123, // reserved keywords /** Added by Mike - these are JSOPs in the jsref, but I * don't have them yet in the java implementation... @@ -221,37 +218,37 @@ public class TokenStream { * Most of these go in the 'op' field when returning * more general token types, eg. 'DIV' as the op of 'ASSIGN'. */ - NOP = 128, // NOP - NOT = 129, // etc. - PRE = 130, // for INC, DEC nodes. - POST = 131, + NOP = 124, // NOP + NOT = 125, // etc. + PRE = 126, // for INC, DEC nodes. + POST = 127, /** * For JSOPs associated with keywords... * eg. op = THIS; token = PRIMARY */ - VOID = 132, + VOID = 128, /* types used for the parse tree - these never get returned * by the scanner. */ - BLOCK = 133, // statement block - ARRAYLIT = 134, // array literal - OBJLIT = 135, // object literal - LABEL = 136, // label - TARGET = 137, - LOOP = 138, - ENUMDONE = 139, - EXPRSTMT = 140, - PARENT = 141, - CONVERT = 142, - JSR = 143, - NEWLOCAL = 144, - USELOCAL = 145, - SCRIPT = 146, // top-level node for entire script + BLOCK = 129, // statement block + ARRAYLIT = 130, // array literal + OBJLIT = 131, // object literal + LABEL = 132, // label + TARGET = 133, + LOOP = 134, + ENUMDONE = 135, + EXPRSTMT = 136, + PARENT = 137, + CONVERT = 138, + JSR = 139, + NEWLOCAL = 140, + USELOCAL = 141, + SCRIPT = 142, // top-level node for entire script - LAST_TOKEN = 146; + LAST_TOKEN = 142; // end enum @@ -325,8 +322,6 @@ public class TokenStream { case THROW: return "throw"; case IN: return "in"; case INSTANCEOF: return "instanceof"; - case GOSUB: return "gosub"; - case RETSUB: return "retsub"; case CALLSPECIAL: return "callspecial"; case GETTHIS: return "getthis"; case NEWTEMP: return "newtemp"; @@ -336,7 +331,6 @@ public class TokenStream { case SETVAR: return "setvar"; case UNDEFINED: return "undefined"; case TRY: return "try"; - case ENDTRY: return "endtry"; case NEWSCOPE: return "newscope"; case TYPEOFNAME: return "typeofname"; case ENUMINIT: return "enuminit"; @@ -348,7 +342,6 @@ public class TokenStream { case SCOPE: return "scope"; case GETSCOPEPARENT: return "getscopeparent"; case THISFN: return "thisfn"; - case JTHROW: return "jthrow"; case SEMI: return "semi"; case LB: return "lb"; case RB: return "rb";