diff options
Diffstat (limited to 'src/parse/lex.cpp')
-rw-r--r-- | src/parse/lex.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/parse/lex.cpp b/src/parse/lex.cpp index 2d6873d0..43fc12aa 100644 --- a/src/parse/lex.cpp +++ b/src/parse/lex.cpp @@ -205,6 +205,8 @@ Token Lexer::getToken() { char ch = this->getc(); + if( ch == '\n' ) + return Token(TOK_NEWLINE); if( isspace(ch) ) { while( isspace(this->getc()) ) @@ -311,6 +313,7 @@ Token Lexer::getToken() str.push_back(ch); ch = this->getc(); } + this->putback(); return Token(TOK_COMMENT, str); } case BLOCKCOMMENT: { ::std::string str; @@ -449,6 +452,7 @@ const char* Token::typestr(enum eTokenType type) case TOK_NULL: return "TOK_NULL"; case TOK_EOF: return "TOK_EOF"; + case TOK_NEWLINE: return "TOK_NEWLINE"; case TOK_WHITESPACE: return "TOK_WHITESPACE"; case TOK_COMMENT: return "TOK_COMMENT"; @@ -579,11 +583,15 @@ const char* Token::typestr(enum eTokenType type) return ">>BUGCHECK: BADTOK<<"; } -::std::ostream& operator<<(::std::ostream& os, Token& tok) +::std::ostream& operator<<(::std::ostream& os, const Token& tok) { os << Token::typestr(tok.type()) << "\"" << tok.str() << "\""; return os; } +::std::ostream& operator<<(::std::ostream& os, const Position& p) +{ + return os << p.filename << ":" << p.line; +} TTStream::TTStream(const TokenTree& input_tt): m_input_tt(input_tt) @@ -623,6 +631,10 @@ Token TTStream::realGetToken() } return Token(TOK_EOF); } +Position TTStream::getPosition() const +{ + return Position("TTStream", 0); +} TokenStream::TokenStream(): m_cache_valid(false) |