--- a/langtools/src/share/classes/com/sun/tools/javac/parser/Scanner.java Thu Nov 24 13:38:40 2011 +0000
+++ b/langtools/src/share/classes/com/sun/tools/javac/parser/Scanner.java Mon Nov 28 15:56:42 2011 +0000
@@ -26,8 +26,9 @@
package com.sun.tools.javac.parser;
import java.nio.*;
+import java.util.List;
+import java.util.ArrayList;
-import com.sun.tools.javac.util.*;
import com.sun.tools.javac.util.Position.LineMap;
import com.sun.tools.javac.parser.JavaTokenizer.*;
@@ -53,6 +54,10 @@
*/
private Token prevToken;
+ /** Buffer of saved tokens (used during lookahead)
+ */
+ private List<Token> savedTokens = new ArrayList<Token>();
+
private JavaTokenizer tokenizer;
/**
* Create a scanner from the input array. This method might
@@ -80,16 +85,35 @@
}
public Token token() {
- return token;
+ return token(0);
}
+ public Token token(int lookahead) {
+ if (lookahead == 0) {
+ return token;
+ } else {
+ ensureLookahead(lookahead);
+ return savedTokens.get(lookahead - 1);
+ }
+ }
+ //where
+ private void ensureLookahead(int lookahead) {
+ for (int i = savedTokens.size() ; i < lookahead ; i ++) {
+ savedTokens.add(tokenizer.readToken());
+ }
+ }
+
public Token prevToken() {
return prevToken;
}
public void nextToken() {
prevToken = token;
- token = tokenizer.readToken();
+ if (!savedTokens.isEmpty()) {
+ token = savedTokens.remove(0);
+ } else {
+ token = tokenizer.readToken();
+ }
}
public Token split() {