From ed9f80690bde53e56c6ef5cb046fb20713f3f780 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Wed, 2 May 2018 20:42:26 +0100 Subject: Simplify expectIdentifierToken by using expectToken --- libsolidity/parsing/ParserBase.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'libsolidity/parsing/ParserBase.cpp') diff --git a/libsolidity/parsing/ParserBase.cpp b/libsolidity/parsing/ParserBase.cpp index 5b83c5bd..617a1779 100644 --- a/libsolidity/parsing/ParserBase.cpp +++ b/libsolidity/parsing/ParserBase.cpp @@ -63,7 +63,7 @@ Token::Value ParserBase::advance() return m_scanner->next(); } -void ParserBase::expectToken(Token::Value _value) +void ParserBase::expectToken(Token::Value _value, bool _advance) { Token::Value tok = m_scanner->currentToken(); if (tok != _value) @@ -98,7 +98,8 @@ void ParserBase::expectToken(Token::Value _value) string("'") ); } - m_scanner->next(); + if (_advance) + m_scanner->next(); } void ParserBase::increaseRecursionDepth() -- cgit v1.2.3 From e3279d8af89c9b5e99e6bca206cb5ce6ef5b0291 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Tue, 17 Apr 2018 13:28:47 +0100 Subject: Display nicer error messages in the parser (display tokens and not internal names) --- libsolidity/parsing/ParserBase.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'libsolidity/parsing/ParserBase.cpp') diff --git a/libsolidity/parsing/ParserBase.cpp b/libsolidity/parsing/ParserBase.cpp index 617a1779..1dd3bdd2 100644 --- a/libsolidity/parsing/ParserBase.cpp +++ b/libsolidity/parsing/ParserBase.cpp @@ -71,10 +71,10 @@ void ParserBase::expectToken(Token::Value _value, bool _advance) if (Token::isReservedKeyword(tok)) { fatalParserError( - string("Expected token ") + - string(Token::name(_value)) + - string(" got reserved keyword '") + - string(Token::name(tok)) + + string("Expected '") + + string(Token::toString(_value)) + + string("' but got reserved keyword '") + + string(Token::toString(tok)) + string("'") ); } @@ -82,19 +82,19 @@ void ParserBase::expectToken(Token::Value _value, bool _advance) { ElementaryTypeNameToken elemTypeName = m_scanner->currentElementaryTypeNameToken(); fatalParserError( - string("Expected token ") + - string(Token::name(_value)) + - string(" got '") + + string("Expected '") + + string(Token::toString(_value)) + + string("' but got '") + elemTypeName.toString() + string("'") ); } else fatalParserError( - string("Expected token ") + - string(Token::name(_value)) + - string(" got '") + - string(Token::name(m_scanner->currentToken())) + + string("Expected '") + + string(Token::toString(_value)) + + string("' but got '") + + string(Token::toString(m_scanner->currentToken())) + string("'") ); } -- cgit v1.2.3 From 252bde8542222953f4432c166d83ba6775a546da Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Wed, 18 Apr 2018 13:29:44 +0100 Subject: Introduce Token::friendlyName() helper --- libsolidity/parsing/ParserBase.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'libsolidity/parsing/ParserBase.cpp') diff --git a/libsolidity/parsing/ParserBase.cpp b/libsolidity/parsing/ParserBase.cpp index 1dd3bdd2..797dea71 100644 --- a/libsolidity/parsing/ParserBase.cpp +++ b/libsolidity/parsing/ParserBase.cpp @@ -72,9 +72,9 @@ void ParserBase::expectToken(Token::Value _value, bool _advance) { fatalParserError( string("Expected '") + - string(Token::toString(_value)) + + Token::friendlyName(_value) + string("' but got reserved keyword '") + - string(Token::toString(tok)) + + Token::friendlyName(tok) + string("'") ); } @@ -83,7 +83,7 @@ void ParserBase::expectToken(Token::Value _value, bool _advance) ElementaryTypeNameToken elemTypeName = m_scanner->currentElementaryTypeNameToken(); fatalParserError( string("Expected '") + - string(Token::toString(_value)) + + Token::friendlyName(_value) + string("' but got '") + elemTypeName.toString() + string("'") @@ -92,9 +92,9 @@ void ParserBase::expectToken(Token::Value _value, bool _advance) else fatalParserError( string("Expected '") + - string(Token::toString(_value)) + + Token::friendlyName(_value) + string("' but got '") + - string(Token::toString(m_scanner->currentToken())) + + Token::friendlyName(tok) + string("'") ); } -- cgit v1.2.3 From 882248ce755d8c905b69bc25964b343906bb94ae Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 4 May 2018 13:07:43 +0100 Subject: Remove code duplication in expectToken --- libsolidity/parsing/ParserBase.cpp | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) (limited to 'libsolidity/parsing/ParserBase.cpp') diff --git a/libsolidity/parsing/ParserBase.cpp b/libsolidity/parsing/ParserBase.cpp index 797dea71..8277ff46 100644 --- a/libsolidity/parsing/ParserBase.cpp +++ b/libsolidity/parsing/ParserBase.cpp @@ -68,35 +68,23 @@ void ParserBase::expectToken(Token::Value _value, bool _advance) Token::Value tok = m_scanner->currentToken(); if (tok != _value) { + string got; if (Token::isReservedKeyword(tok)) - { - fatalParserError( - string("Expected '") + - Token::friendlyName(_value) + - string("' but got reserved keyword '") + - Token::friendlyName(tok) + - string("'") - ); - } + got = "reserved keyword '" + Token::friendlyName(tok) + "'"; else if (Token::isElementaryTypeName(tok)) //for the sake of accuracy in reporting { ElementaryTypeNameToken elemTypeName = m_scanner->currentElementaryTypeNameToken(); - fatalParserError( - string("Expected '") + - Token::friendlyName(_value) + - string("' but got '") + - elemTypeName.toString() + - string("'") - ); + got = "'" + elemTypeName.toString() + "'"; } else - fatalParserError( - string("Expected '") + - Token::friendlyName(_value) + - string("' but got '") + - Token::friendlyName(tok) + - string("'") - ); + got = "'" + Token::friendlyName(tok) + "'"; + + fatalParserError( + string("Expected '") + + Token::friendlyName(_value) + + string("' but got ") + + got + ); } if (_advance) m_scanner->next(); -- cgit v1.2.3 From c7ee649d8033aedf49f83342c76984fe53449679 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 4 May 2018 13:26:23 +0100 Subject: More user friendly output in case of Identifier and Token keywords --- libsolidity/parsing/ParserBase.cpp | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) (limited to 'libsolidity/parsing/ParserBase.cpp') diff --git a/libsolidity/parsing/ParserBase.cpp b/libsolidity/parsing/ParserBase.cpp index 8277ff46..d0c7a551 100644 --- a/libsolidity/parsing/ParserBase.cpp +++ b/libsolidity/parsing/ParserBase.cpp @@ -68,23 +68,24 @@ void ParserBase::expectToken(Token::Value _value, bool _advance) Token::Value tok = m_scanner->currentToken(); if (tok != _value) { - string got; - if (Token::isReservedKeyword(tok)) - got = "reserved keyword '" + Token::friendlyName(tok) + "'"; - else if (Token::isElementaryTypeName(tok)) //for the sake of accuracy in reporting + auto tokenName = [this](Token::Value _token) { - ElementaryTypeNameToken elemTypeName = m_scanner->currentElementaryTypeNameToken(); - got = "'" + elemTypeName.toString() + "'"; - } - else - got = "'" + Token::friendlyName(tok) + "'"; - - fatalParserError( - string("Expected '") + - Token::friendlyName(_value) + - string("' but got ") + - got - ); + if (_token == Token::Identifier) + return string("identifier"); + else if (_token == Token::EOS) + return string("end of source"); + else if (Token::isReservedKeyword(_token)) + return string("reserved keyword '") + Token::friendlyName(_token) + "'"; + else if (Token::isElementaryTypeName(_token)) //for the sake of accuracy in reporting + { + ElementaryTypeNameToken elemTypeName = m_scanner->currentElementaryTypeNameToken(); + return string("'") + elemTypeName.toString() + "'"; + } + else + return string("'") + Token::friendlyName(_token) + "'"; + }; + + fatalParserError(string("Expected ") + tokenName(_value) + string(" but got ") + tokenName(tok)); } if (_advance) m_scanner->next(); -- cgit v1.2.3 From 02380113d417b298282c81bf35ddb596006ce77a Mon Sep 17 00:00:00 2001 From: Daniel Kirchner Date: Wed, 9 May 2018 13:02:20 +0200 Subject: Use the entire token as source location for parser errors. --- libsolidity/parsing/ParserBase.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libsolidity/parsing/ParserBase.cpp') diff --git a/libsolidity/parsing/ParserBase.cpp b/libsolidity/parsing/ParserBase.cpp index d0c7a551..71133746 100644 --- a/libsolidity/parsing/ParserBase.cpp +++ b/libsolidity/parsing/ParserBase.cpp @@ -106,10 +106,10 @@ void ParserBase::decreaseRecursionDepth() void ParserBase::parserError(string const& _description) { - m_errorReporter.parserError(SourceLocation(position(), position(), sourceName()), _description); + m_errorReporter.parserError(SourceLocation(position(), endPosition(), sourceName()), _description); } void ParserBase::fatalParserError(string const& _description) { - m_errorReporter.fatalParserError(SourceLocation(position(), position(), sourceName()), _description); + m_errorReporter.fatalParserError(SourceLocation(position(), endPosition(), sourceName()), _description); } -- cgit v1.2.3