| Index: runtime/vm/scanner.h
|
| diff --git a/runtime/vm/scanner.h b/runtime/vm/scanner.h
|
| index 23b723cd068afacb3a8cf5ebdbcaf105a33f0a30..f6a0545ff28bd2d26730de57d0c3956a03114060 100644
|
| --- a/runtime/vm/scanner.h
|
| +++ b/runtime/vm/scanner.h
|
| @@ -22,7 +22,7 @@ class ScanContext;
|
| class String;
|
|
|
| // A call to Scan() scans the source one token at at time.
|
| -// The scanned token is returned by cur_token().
|
| +// The scanned token is returned by current_token().
|
| // GetStream() scans the entire source text and returns a stream of tokens.
|
| class Scanner : ValueObject {
|
| public:
|
| @@ -44,7 +44,14 @@ class Scanner : ValueObject {
|
| const String* literal; // Identifier, number or string literal.
|
| };
|
|
|
| - typedef ZoneGrowableArray<TokenDescriptor> GrowableTokenStream;
|
| + class TokenCollector : public ValueObject {
|
| + public:
|
| + TokenCollector() { }
|
| + virtual ~TokenCollector() { }
|
| + virtual void AddToken(const TokenDescriptor& token);
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(TokenCollector);
|
| + };
|
|
|
| // Initializes scanner to scan string source.
|
| Scanner(const String& source, const String& private_key);
|
| @@ -53,14 +60,13 @@ class Scanner : ValueObject {
|
| // Scans one token at a time.
|
| void Scan();
|
|
|
| + // Scans the entire source and collects tokens in the provided collector.
|
| + void ScanAll(TokenCollector* collector);
|
| +
|
| // Scans to specified token position.
|
| // Use CurrentPosition() to extract line and column number.
|
| void ScanTo(intptr_t token_index);
|
|
|
| - // Scans entire source and returns a stream of tokens.
|
| - // Should be called only once.
|
| - const GrowableTokenStream& GetStream();
|
| -
|
| // Info about most recently recognized token.
|
| const TokenDescriptor& current_token() const { return current_token_; }
|
|
|
| @@ -77,10 +83,8 @@ class Scanner : ValueObject {
|
| // Return true if str is an identifier.
|
| bool IsIdent(const String& str);
|
|
|
| - // Does the token stream contain a valid literal. This is used to implement
|
| - // the Dart methods int.parse and double.parse.
|
| - static bool IsValidLiteral(const Scanner::GrowableTokenStream& tokens,
|
| - Token::Kind literal_kind,
|
| + // Does the token stream contain a valid integer literal.
|
| + static bool IsValidInteger(const String& str,
|
| bool* is_positive,
|
| const String** value);
|
|
|
| @@ -115,9 +119,6 @@ class Scanner : ValueObject {
|
|
|
| void ErrorMsg(const char* msg);
|
|
|
| - // Scans entire source into a given stream of tokens.
|
| - void ScanAll(GrowableTokenStream* token_stream);
|
| -
|
| // These functions return true if the given character is a letter,
|
| // a decimal digit, a hexadecimal digit, etc.
|
| static bool IsLetter(int32_t c);
|
| @@ -182,8 +183,6 @@ class Scanner : ValueObject {
|
| Thread* thread() const { return thread_; }
|
| Zone* zone() const { return zone_; }
|
|
|
| - static void PrintTokens(const GrowableTokenStream& ts);
|
| -
|
| TokenDescriptor current_token_; // Current token.
|
| TokenDescriptor newline_token_; // Newline token.
|
| TokenDescriptor empty_string_token_; // Token for "".
|
|
|