1.1 --- a/src/share/classes/com/sun/tools/javac/parser/Scanner.java Thu Nov 24 13:38:40 2011 +0000 1.2 +++ b/src/share/classes/com/sun/tools/javac/parser/Scanner.java Mon Nov 28 15:56:42 2011 +0000 1.3 @@ -26,8 +26,9 @@ 1.4 package com.sun.tools.javac.parser; 1.5 1.6 import java.nio.*; 1.7 +import java.util.List; 1.8 +import java.util.ArrayList; 1.9 1.10 -import com.sun.tools.javac.util.*; 1.11 import com.sun.tools.javac.util.Position.LineMap; 1.12 import com.sun.tools.javac.parser.JavaTokenizer.*; 1.13 1.14 @@ -53,6 +54,10 @@ 1.15 */ 1.16 private Token prevToken; 1.17 1.18 + /** Buffer of saved tokens (used during lookahead) 1.19 + */ 1.20 + private List<Token> savedTokens = new ArrayList<Token>(); 1.21 + 1.22 private JavaTokenizer tokenizer; 1.23 /** 1.24 * Create a scanner from the input array. This method might 1.25 @@ -80,16 +85,35 @@ 1.26 } 1.27 1.28 public Token token() { 1.29 - return token; 1.30 + return token(0); 1.31 } 1.32 1.33 + public Token token(int lookahead) { 1.34 + if (lookahead == 0) { 1.35 + return token; 1.36 + } else { 1.37 + ensureLookahead(lookahead); 1.38 + return savedTokens.get(lookahead - 1); 1.39 + } 1.40 + } 1.41 + //where 1.42 + private void ensureLookahead(int lookahead) { 1.43 + for (int i = savedTokens.size() ; i < lookahead ; i ++) { 1.44 + savedTokens.add(tokenizer.readToken()); 1.45 + } 1.46 + } 1.47 + 1.48 public Token prevToken() { 1.49 return prevToken; 1.50 } 1.51 1.52 public void nextToken() { 1.53 prevToken = token; 1.54 - token = tokenizer.readToken(); 1.55 + if (!savedTokens.isEmpty()) { 1.56 + token = savedTokens.remove(0); 1.57 + } else { 1.58 + token = tokenizer.readToken(); 1.59 + } 1.60 } 1.61 1.62 public Token split() {