2003/06/09 06:38:36
[org.ibex.core.git] / src / org / xwt / js / Parser.java
index addf0f0..f594eee 100644 (file)
@@ -10,11 +10,7 @@ class Parser extends Lexer implements ByteCodes {
 
     // Constructors //////////////////////////////////////////////////////
 
-    public Parser(Reader r, String sourceName, int line) throws IOException {
-       super(r);
-       this.sourceName = sourceName;
-       this.line = line;
-    }
+    public Parser(Reader r, String sourceName, int line) throws IOException { super(r, sourceName, line); }
 
     /** for debugging */
     public static void main(String[] s) throws Exception {
@@ -81,9 +77,6 @@ class Parser extends Lexer implements ByteCodes {
        int tok = getToken();
        int curLine = line;
        if (tok == -1) return;
-       if (minPrecedence > 0 && precedence[tok] != 0)
-           if (precedence[tok] < minPrecedence || (precedence[tok] == minPrecedence && !isRightAssociative[tok]))
-               { pushBackToken(); return; }
 
        ByteCodeBlock b = appendTo;
 
@@ -111,7 +104,8 @@ class Parser extends Lexer implements ByteCodes {
        }
        case SUB: {
            consume(NUMBER);
-           continueExpr(b.add(ByteCodeBlock.LITERAL, new Double(number.doubleValue() * -1)), minPrecedence);
+           b.add(ByteCodeBlock.LITERAL, new Double(number.doubleValue() * -1));
+           continueExpr(b, minPrecedence);
            return;
        }
        case LP: {
@@ -536,7 +530,8 @@ class Parser extends Lexer implements ByteCodes {
            consume(LP);
 
            tok = getToken();
-           if (tok == VAR) tok = getToken();
+           boolean hadVar = false;
+           if (tok == VAR) { hadVar = true; tok = getToken(); }
            String varName = string;
            boolean forIn = peekToken() == IN;
            pushBackToken(tok, varName);
@@ -566,14 +561,13 @@ class Parser extends Lexer implements ByteCodes {
                break;
                
            } else {
+               if (hadVar) pushBackToken(VAR, null);
                ByteCodeBlock b2 = newbb(curLine);
                b.add(SCOPE, b2);
                b.add(POP);
 
                int size = b2.size();
-               startExpr(b2);
-               if (b2.size() - size > 0) b2.add(POP);
-               consume(SEMI);
+               parseStatement(false, b2);
                ByteCodeBlock e2 = startExpr();
                consume(SEMI);
                if (e2 == null) e2 = newbb(curLine).add(b.LITERAL, null);
@@ -593,7 +587,7 @@ class Parser extends Lexer implements ByteCodes {
                b3.add(JT, new Integer(2));
                b3.add(BREAK);
                parseStatement(false, b3);
-               b3.add(BREAK);
+               b3.add(CONTINUE);
                break;
            }
        }