diff options
author | Christian <c@ethdev.com> | 2014-10-09 18:28:37 +0800 |
---|---|---|
committer | Christian <c@ethdev.com> | 2014-10-09 18:36:17 +0800 |
commit | c3faa433ef2cb864764320adcb3c980b0fab7c0d (patch) | |
tree | 1dee4defd620c5532c8c65ff334123fc80856b80 /Scanner.h | |
parent | 0a1ebe4f516a5c1e8ebc12798a94529bdda9b6df (diff) | |
download | dexon-solidity-c3faa433ef2cb864764320adcb3c980b0fab7c0d.tar.gz dexon-solidity-c3faa433ef2cb864764320adcb3c980b0fab7c0d.tar.zst dexon-solidity-c3faa433ef2cb864764320adcb3c980b0fab7c0d.zip |
Corrected indentation.
Diffstat (limited to 'Scanner.h')
-rw-r--r-- | Scanner.h | 354 |
1 files changed, 177 insertions, 177 deletions
@@ -60,37 +60,37 @@ class ParserRecorder; class CharStream { public: - CharStream() - : m_pos(0) - {} - - explicit CharStream(const std::string& _source) - : m_source(_source), m_pos(0) - {} - int getPos() const { return m_pos; } - bool isPastEndOfInput() const { return m_pos >= m_source.size(); } - char get() const { return m_source[m_pos]; } - char advanceAndGet() { - if (isPastEndOfInput()) return 0; - ++m_pos; - if (isPastEndOfInput()) return 0; - return get(); - } - char rollback(size_t _amount) { - BOOST_ASSERT(m_pos >= _amount); - m_pos -= _amount; - return get(); - } - - /// Functions that help pretty-printing parse errors - /// Do only use in error cases, they are quite expensive. - /// @{ - std::string getLineAtPosition(int _position) const; - std::tuple<int, int> translatePositionToLineColumn(int _position) const; - /// @} + CharStream() + : m_pos(0) + {} + + explicit CharStream(const std::string& _source) + : m_source(_source), m_pos(0) + {} + int getPos() const { return m_pos; } + bool isPastEndOfInput() const { return m_pos >= m_source.size(); } + char get() const { return m_source[m_pos]; } + char advanceAndGet() { + if (isPastEndOfInput()) return 0; + ++m_pos; + if (isPastEndOfInput()) return 0; + return get(); + } + char rollback(size_t _amount) { + BOOST_ASSERT(m_pos >= _amount); + m_pos -= _amount; + return get(); + } + + /// Functions that help pretty-printing parse errors + /// Do only use in error cases, they are quite expensive. + /// @{ + std::string getLineAtPosition(int _position) const; + std::tuple<int, int> translatePositionToLineColumn(int _position) const; + /// @} private: - std::string m_source; - size_t m_pos; + std::string m_source; + size_t m_pos; }; // ---------------------------------------------------------------------------- @@ -98,155 +98,155 @@ private: class Scanner { public: - // Scoped helper for literal recording. Automatically drops the literal - // if aborting the scanning before it's complete. - class LiteralScope { - public: - explicit LiteralScope(Scanner* self) - : scanner_(self), complete_(false) { - scanner_->startNewLiteral(); - } - ~LiteralScope() { - if (!complete_) scanner_->dropLiteral(); - } - void Complete() { - complete_ = true; - } - - private: - Scanner* scanner_; - bool complete_; - }; - - explicit Scanner(const CharStream& _source); - - // Resets the scanner as if newly constructed with _input as input. - void reset(const CharStream& _source); - - // Returns the next token and advances input. - Token::Value next(); - // Returns the current token again. - Token::Value getCurrentToken() { return m_current_token.token; } - // Returns the location information for the current token - // (the token last returned by Next()). - Location getCurrentLocation() const { return m_current_token.location; } - const std::string& getCurrentLiteral() const { return m_current_token.literal; } - - // Similar functions for the upcoming token. - - // One token look-ahead (past the token returned by Next()). - Token::Value peek() const { return m_next_token.token; } - - Location peekLocation() const { return m_next_token.location; } - const std::string& peekLiteral() const { return m_next_token.literal; } - - /// Functions that help pretty-printing parse errors. - /// Do only use in error cases, they are quite expensive. - /// @{ - std::string getLineAtPosition(int _position) const { return m_source.getLineAtPosition(_position); } - std::tuple<int, int> translatePositionToLineColumn(int _position) const - { - return m_source.translatePositionToLineColumn(_position); - } - /// @} - - // Returns true if there was a line terminator before the peek'ed token, - // possibly inside a multi-line comment. - bool hasAnyLineTerminatorBeforeNext() const { - return m_hasLineTerminatorBeforeNext || - m_hasMultilineCommentBeforeNext; - } + // Scoped helper for literal recording. Automatically drops the literal + // if aborting the scanning before it's complete. + class LiteralScope { + public: + explicit LiteralScope(Scanner* self) + : scanner_(self), complete_(false) { + scanner_->startNewLiteral(); + } + ~LiteralScope() { + if (!complete_) scanner_->dropLiteral(); + } + void Complete() { + complete_ = true; + } + + private: + Scanner* scanner_; + bool complete_; + }; + + explicit Scanner(const CharStream& _source); + + // Resets the scanner as if newly constructed with _input as input. + void reset(const CharStream& _source); + + // Returns the next token and advances input. + Token::Value next(); + // Returns the current token again. + Token::Value getCurrentToken() { return m_current_token.token; } + // Returns the location information for the current token + // (the token last returned by Next()). + Location getCurrentLocation() const { return m_current_token.location; } + const std::string& getCurrentLiteral() const { return m_current_token.literal; } + + // Similar functions for the upcoming token. + + // One token look-ahead (past the token returned by Next()). + Token::Value peek() const { return m_next_token.token; } + + Location peekLocation() const { return m_next_token.location; } + const std::string& peekLiteral() const { return m_next_token.literal; } + + /// Functions that help pretty-printing parse errors. + /// Do only use in error cases, they are quite expensive. + /// @{ + std::string getLineAtPosition(int _position) const { return m_source.getLineAtPosition(_position); } + std::tuple<int, int> translatePositionToLineColumn(int _position) const + { + return m_source.translatePositionToLineColumn(_position); + } + /// @} + + // Returns true if there was a line terminator before the peek'ed token, + // possibly inside a multi-line comment. + bool hasAnyLineTerminatorBeforeNext() const { + return m_hasLineTerminatorBeforeNext || + m_hasMultilineCommentBeforeNext; + } private: - // Used for the current and look-ahead token. - struct TokenDesc { - Token::Value token; - Location location; - std::string literal; - }; - - // Literal buffer support - inline void startNewLiteral() { - m_next_token.literal.clear(); - } - - inline void addLiteralChar(char c) { - m_next_token.literal.push_back(c); - } - - inline void dropLiteral() { - m_next_token.literal.clear(); - } - - inline void addLiteralCharAndAdvance() { - addLiteralChar(m_char); - advance(); - } - - // Low-level scanning support. - bool advance() { m_char = m_source.advanceAndGet(); return !m_source.isPastEndOfInput(); } - void rollback(int amount) { - m_char = m_source.rollback(amount); - } - - inline Token::Value selectToken(Token::Value tok) { - advance(); - return tok; - } - - inline Token::Value selectToken(char next, Token::Value then, Token::Value else_) { - advance(); - if (m_char == next) { - advance(); - return then; - } else { - return else_; - } - } - - bool scanHexNumber(char& scanned_number, int expected_length); - - // Scans a single JavaScript token. - void scanToken(); - - bool skipWhitespace(); - Token::Value skipSingleLineComment(); - Token::Value skipMultiLineComment(); - - void scanDecimalDigits(); - Token::Value scanNumber(bool _periodSeen); - Token::Value scanIdentifierOrKeyword(); - - Token::Value scanString(); - - // Scans an escape-sequence which is part of a string and adds the - // decoded character to the current literal. Returns true if a pattern - // is scanned. - bool scanEscape(); - - // Return the current source position. - int getSourcePos() { - return m_source.getPos(); - } - bool isSourcePastEndOfInput() { - return m_source.isPastEndOfInput(); - } - - TokenDesc m_current_token; // desc for current token (as returned by Next()) - TokenDesc m_next_token; // desc for next token (one token look-ahead) - - CharStream m_source; - - // one character look-ahead, equals 0 at end of input - char m_char; - - // Whether there is a line terminator whitespace character after - // the current token, and before the next. Does not count newlines - // inside multiline comments. - bool m_hasLineTerminatorBeforeNext; - // Whether there is a multi-line comment that contains a - // line-terminator after the current token, and before the next. - bool m_hasMultilineCommentBeforeNext; + // Used for the current and look-ahead token. + struct TokenDesc { + Token::Value token; + Location location; + std::string literal; + }; + + // Literal buffer support + inline void startNewLiteral() { + m_next_token.literal.clear(); + } + + inline void addLiteralChar(char c) { + m_next_token.literal.push_back(c); + } + + inline void dropLiteral() { + m_next_token.literal.clear(); + } + + inline void addLiteralCharAndAdvance() { + addLiteralChar(m_char); + advance(); + } + + // Low-level scanning support. + bool advance() { m_char = m_source.advanceAndGet(); return !m_source.isPastEndOfInput(); } + void rollback(int amount) { + m_char = m_source.rollback(amount); + } + + inline Token::Value selectToken(Token::Value tok) { + advance(); + return tok; + } + + inline Token::Value selectToken(char next, Token::Value then, Token::Value else_) { + advance(); + if (m_char == next) { + advance(); + return then; + } else { + return else_; + } + } + + bool scanHexNumber(char& scanned_number, int expected_length); + + // Scans a single JavaScript token. + void scanToken(); + + bool skipWhitespace(); + Token::Value skipSingleLineComment(); + Token::Value skipMultiLineComment(); + + void scanDecimalDigits(); + Token::Value scanNumber(bool _periodSeen); + Token::Value scanIdentifierOrKeyword(); + + Token::Value scanString(); + + // Scans an escape-sequence which is part of a string and adds the + // decoded character to the current literal. Returns true if a pattern + // is scanned. + bool scanEscape(); + + // Return the current source position. + int getSourcePos() { + return m_source.getPos(); + } + bool isSourcePastEndOfInput() { + return m_source.isPastEndOfInput(); + } + + TokenDesc m_current_token; // desc for current token (as returned by Next()) + TokenDesc m_next_token; // desc for next token (one token look-ahead) + + CharStream m_source; + + // one character look-ahead, equals 0 at end of input + char m_char; + + // Whether there is a line terminator whitespace character after + // the current token, and before the next. Does not count newlines + // inside multiline comments. + bool m_hasLineTerminatorBeforeNext; + // Whether there is a multi-line comment that contains a + // line-terminator after the current token, and before the next. + bool m_hasMultilineCommentBeforeNext; }; } } |