src/share/classes/com/sun/tools/javac/parser/Scanner.java

changeset 1144
9448fe783fd2
parent 1113
d346ab55031b
child 1358
fc123bdeddb8
     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() {

mercurial