new js api
[org.ibex.core.git] / src / org / ibex / js / Parser.java
index 38d15ea..c6c9d9e 100644 (file)
@@ -169,18 +169,18 @@ class Parser extends Lexer implements ByteCodes {
         case -1: throw pe("expected expression");
 
         // all of these simply push values onto the stack
-        case NUMBER: b.add(parserLine, LITERAL, number); break;
-        case STRING: b.add(parserLine, LITERAL, string); break;
+        case NUMBER: b.add(parserLine, LITERAL, JS.N(number)); break;
+        case STRING: b.add(parserLine, LITERAL, JSString.intern(string)); break;
         case NULL: b.add(parserLine, LITERAL, null); break;
-        case TRUE: case FALSE: b.add(parserLine, LITERAL, JS.B(tok == TRUE)); break;
+        case TRUE: case FALSE: b.add(parserLine, LITERAL, tok == TRUE ? JS.T : JS.F); break;
 
         // (.foo) syntax
         case DOT: {
             consume(NAME);
             b.add(parserLine, TOPSCOPE);
-            b.add(parserLine, LITERAL, "");
+            b.add(parserLine, LITERAL, JSString.intern(""));
             b.add(parserLine, GET);
-            b.add(parserLine, LITERAL, string);
+            b.add(parserLine, LITERAL, JSString.intern(string));
             b.add(parserLine, GET);
             continueExpr(b, minPrecedence);
             break;
@@ -253,7 +253,7 @@ class Parser extends Lexer implements ByteCodes {
                     if (peekToken() != NAME && peekToken() != STRING)
                         throw pe("expected NAME or STRING");
                     getToken();
-                    b.add(parserLine, LITERAL, string);                          // grab the key
+                    b.add(parserLine, LITERAL, JSString.intern(string));                          // grab the key
                     consume(COLON);
                     startExpr(b, NO_COMMA);                                      // grab the value
                     b.add(parserLine, PUT);                                      // put the value into the object
@@ -267,7 +267,7 @@ class Parser extends Lexer implements ByteCodes {
         }
         case NAME: {
             b.add(parserLine, TOPSCOPE);
-            b.add(parserLine, LITERAL, string);
+            b.add(parserLine, LITERAL, JSString.intern(string));
             continueExprAfterAssignable(b,minPrecedence);
             break;
         }
@@ -280,7 +280,7 @@ class Parser extends Lexer implements ByteCodes {
             // function prelude; arguments array is already on the stack
             b2.add(parserLine, TOPSCOPE);
             b2.add(parserLine, SWAP);
-            b2.add(parserLine, DECLARE, "arguments");                     // declare arguments (equivalent to 'var arguments;')
+            b2.add(parserLine, DECLARE, JSString.intern("arguments"));    // declare arguments (equivalent to 'var arguments;')
             b2.add(parserLine, SWAP);                                     // set this.arguments and leave the value on the stack
             b2.add(parserLine, PUT);
 
@@ -288,7 +288,7 @@ class Parser extends Lexer implements ByteCodes {
                 numArgs++;
                 if (peekToken() == NAME) {
                     consume(NAME);                                        // a named argument
-                    String varName = string;
+                    JS varName = JSString.intern(string);
                     
                     b2.add(parserLine, DUP);                              // dup the args array 
                     b2.add(parserLine, GET, JS.N(numArgs - 1));   // retrieve it from the arguments array
@@ -515,7 +515,7 @@ class Parser extends Lexer implements ByteCodes {
             } else {
                 consume(NAME);
             }
-            b.add(parserLine, LITERAL, string);
+            b.add(parserLine, LITERAL, JSString.intern(string));
             continueExprAfterAssignable(b,minPrecedence);
             break;
         }
@@ -616,7 +616,7 @@ class Parser extends Lexer implements ByteCodes {
             b.add(parserLine, TOPSCOPE);                         // push the current scope
             while(true) {
                 consume(NAME);
-                b.add(parserLine, DECLARE, string);               // declare it
+                b.add(parserLine, DECLARE, JSString.intern(string)); // declare it
                 if (peekToken() == ASSIGN) {                     // if there is an '=' after the variable name
                     consume(ASSIGN);
                     startExpr(b, NO_COMMA);
@@ -749,7 +749,7 @@ class Parser extends Lexer implements ByteCodes {
                         // extended Ibex catch block: catch(e faultCode "foo.bar.baz")
                         consume(NAME);
                         b.add(parserLine, DUP);
-                        b.add(parserLine, LITERAL, string);
+                        b.add(parserLine, LITERAL, JSString.intern(string));
                         b.add(parserLine, GET);
                         b.add(parserLine, DUP);
                         b.add(parserLine, LITERAL, null);
@@ -785,7 +785,7 @@ class Parser extends Lexer implements ByteCodes {
                     b.add(parserLine, NEWSCOPE);
                     b.add(parserLine, TOPSCOPE);
                     b.add(parserLine, SWAP);
-                    b.add(parserLine, LITERAL,exceptionVar);
+                    b.add(parserLine, LITERAL,JSString.intern(exceptionVar));
                     b.add(parserLine, DECLARE);
                     b.add(parserLine, SWAP);
                     b.add(parserLine, PUT);
@@ -850,7 +850,7 @@ class Parser extends Lexer implements ByteCodes {
                 
                 b.add(parserLine, PUSHKEYS);
                 b.add(parserLine, DUP); 
-                b.add(parserLine, LITERAL, "length"); 
+                b.add(parserLine, LITERAL, JSString.intern("length"));
                 b.add(parserLine, GET);
                 // Stack is now: n, keys, obj, ...
                 
@@ -881,7 +881,7 @@ class Parser extends Lexer implements ByteCodes {
                 
                 b.add(parserLine, NEWSCOPE);
                 if(hadVar) {
-                    b.add(parserLine, DECLARE, varName);
+                    b.add(parserLine, DECLARE, JSString.intern(varName));
                     b.add(parserLine, POP);
                 }
                 
@@ -889,7 +889,7 @@ class Parser extends Lexer implements ByteCodes {
                 b.add(parserLine, GET_PRESERVE);     // key, index, keys, obj, LoopMarker, ...
                 b.add(parserLine, TOPSCOPE);         // scope, key, index, keys, obj, LoopMarker, ...
                 b.add(parserLine, SWAP);             // key, scope, index, keys, obj, LoopMarker, ...
-                b.add(parserLine, LITERAL, varName); // varName, key, scope, index, keys, obj, LoopMaker, ...
+                b.add(parserLine, LITERAL, JSString.intern(varName)); // varName, key, scope, index, keys, obj, LoopMaker, ...
                 b.add(parserLine, SWAP);             // key, varName, scope, index, keys, obj, LoopMarker, ...
                 b.add(parserLine, PUT);              // key, scope, index, keys, obj, LoopMarker, ...
                 b.add(parserLine, POP);              // scope, index, keys, obj, LoopMarker
@@ -920,7 +920,7 @@ class Parser extends Lexer implements ByteCodes {
                 if (peekToken() != SEMI)
                     startExpr(e2, -1);
                 else
-                    e2.add(parserLine, JSFunction.LITERAL, Boolean.TRUE);         // handle the for(foo;;foo) case
+                    e2.add(parserLine, JSFunction.LITERAL, JS.T);         // handle the for(foo;;foo) case
                 consume(SEMI);
                 if (label != null) b.add(parserLine, LABEL, label);
                 b.add(parserLine, LOOP);