summaryrefslogtreecommitdiff
path: root/src/parse/lex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse/lex.cpp')
-rw-r--r--src/parse/lex.cpp14
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)