mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
parent
4ab2e03be3
commit
4bcd89105c
@ -1554,6 +1554,9 @@ ASTPointer<Expression> Parser::parsePrimaryExpression()
|
|||||||
expression = nodeFactory.createNode<TupleExpression>(components, isArray);
|
expression = nodeFactory.createNode<TupleExpression>(components, isArray);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case Token::IllegalHex:
|
||||||
|
fatalParserError("Expected even number of hex-nibbles within double-quotes.");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (Token::isElementaryTypeName(token))
|
if (Token::isElementaryTypeName(token))
|
||||||
{
|
{
|
||||||
|
@ -612,7 +612,7 @@ void Scanner::scanToken()
|
|||||||
if (m_char == '"' || m_char == '\'')
|
if (m_char == '"' || m_char == '\'')
|
||||||
token = scanHexString();
|
token = scanHexString();
|
||||||
else
|
else
|
||||||
token = Token::Illegal;
|
token = Token::IllegalHex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (isDecimalDigit(m_char))
|
else if (isDecimalDigit(m_char))
|
||||||
@ -736,11 +736,11 @@ Token::Value Scanner::scanHexString()
|
|||||||
{
|
{
|
||||||
char c = m_char;
|
char c = m_char;
|
||||||
if (!scanHexByte(c))
|
if (!scanHexByte(c))
|
||||||
return Token::Illegal;
|
return Token::IllegalHex;
|
||||||
addLiteralChar(c);
|
addLiteralChar(c);
|
||||||
}
|
}
|
||||||
if (m_char != quote)
|
if (m_char != quote)
|
||||||
return Token::Illegal;
|
return Token::IllegalHex;
|
||||||
literal.complete();
|
literal.complete();
|
||||||
advance(); // consume quote
|
advance(); // consume quote
|
||||||
return Token::StringLiteral;
|
return Token::StringLiteral;
|
||||||
|
@ -261,6 +261,8 @@ namespace solidity
|
|||||||
\
|
\
|
||||||
/* Illegal token - not able to scan. */ \
|
/* Illegal token - not able to scan. */ \
|
||||||
T(Illegal, "ILLEGAL", 0) \
|
T(Illegal, "ILLEGAL", 0) \
|
||||||
|
/* Illegal hex token */ \
|
||||||
|
T(IllegalHex, "ILLEGAL_HEX", 0) \
|
||||||
\
|
\
|
||||||
/* Scanner-internal use only. */ \
|
/* Scanner-internal use only. */ \
|
||||||
T(Whitespace, NULL, 0)
|
T(Whitespace, NULL, 0)
|
||||||
|
@ -471,6 +471,8 @@ BOOST_AUTO_TEST_CASE(invalid_short_unicode_string_escape)
|
|||||||
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
|
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HEX STRING LITERAL
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(valid_hex_literal)
|
BOOST_AUTO_TEST_CASE(valid_hex_literal)
|
||||||
{
|
{
|
||||||
Scanner scanner(CharStream("{ hex\"00112233FF\""));
|
Scanner scanner(CharStream("{ hex\"00112233FF\""));
|
||||||
@ -483,30 +485,32 @@ BOOST_AUTO_TEST_CASE(invalid_short_hex_literal)
|
|||||||
{
|
{
|
||||||
Scanner scanner(CharStream("{ hex\"00112233F\""));
|
Scanner scanner(CharStream("{ hex\"00112233F\""));
|
||||||
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
|
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
|
||||||
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
|
BOOST_CHECK_EQUAL(scanner.next(), Token::IllegalHex);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(invalid_hex_literal_with_space)
|
BOOST_AUTO_TEST_CASE(invalid_hex_literal_with_space)
|
||||||
{
|
{
|
||||||
Scanner scanner(CharStream("{ hex\"00112233FF \""));
|
Scanner scanner(CharStream("{ hex\"00112233FF \""));
|
||||||
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
|
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
|
||||||
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
|
BOOST_CHECK_EQUAL(scanner.next(), Token::IllegalHex);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(invalid_hex_literal_with_wrong_quotes)
|
BOOST_AUTO_TEST_CASE(invalid_hex_literal_with_wrong_quotes)
|
||||||
{
|
{
|
||||||
Scanner scanner(CharStream("{ hex\"00112233FF'"));
|
Scanner scanner(CharStream("{ hex\"00112233FF'"));
|
||||||
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
|
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
|
||||||
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
|
BOOST_CHECK_EQUAL(scanner.next(), Token::IllegalHex);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(invalid_hex_literal_nonhex_string)
|
BOOST_AUTO_TEST_CASE(invalid_hex_literal_nonhex_string)
|
||||||
{
|
{
|
||||||
Scanner scanner(CharStream("{ hex\"hello\""));
|
Scanner scanner(CharStream("{ hex\"hello\""));
|
||||||
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
|
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
|
||||||
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
|
BOOST_CHECK_EQUAL(scanner.next(), Token::IllegalHex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// COMMENTS
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(invalid_multiline_comment_close)
|
BOOST_AUTO_TEST_CASE(invalid_multiline_comment_close)
|
||||||
{
|
{
|
||||||
// This used to parse as "comment", "identifier"
|
// This used to parse as "comment", "identifier"
|
||||||
|
Loading…
Reference in New Issue
Block a user