Remove the \b, \f, \v escape sequences from the Scanner

This commit is contained in:
Alex Beregszaszi
2020-12-07 21:10:03 +00:00
parent 933f4db798
commit 66ee3ec533
8 changed files with 45 additions and 13 deletions
+21 -2
View File
@@ -131,10 +131,29 @@ BOOST_AUTO_TEST_CASE(string_escapes)
BOOST_AUTO_TEST_CASE(string_escapes_all)
{
Scanner scanner(CharStream(" { \"a\\x61\\b\\f\\n\\r\\t\\v\"", ""));
Scanner scanner(CharStream(" { \"a\\x61\\n\\r\\t\"", ""));
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::StringLiteral);
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "aa\b\f\n\r\t\v");
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "aa\n\r\t");
}
BOOST_AUTO_TEST_CASE(string_escapes_legal_before_080)
{
Scanner scanner(CharStream(" { \"a\\b", ""));
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
BOOST_CHECK_EQUAL(scanner.currentError(), ScannerError::IllegalEscapeSequence);
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "");
scanner.reset(CharStream(" { \"a\\f", ""));
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
BOOST_CHECK_EQUAL(scanner.currentError(), ScannerError::IllegalEscapeSequence);
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "");
scanner.reset(CharStream(" { \"a\\v", ""));
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
BOOST_CHECK_EQUAL(scanner.currentError(), ScannerError::IllegalEscapeSequence);
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "");
}
BOOST_AUTO_TEST_CASE(string_escapes_with_zero)
@@ -0,0 +1,10 @@
contract test {
function f() public pure returns (bytes32) {
bytes32 escapeCharacters = "\t\n\r\'\"\\";
return escapeCharacters;
}
}
// ====
// compileViaYul: also
// ----
// f() -> 0x090a0d27225c0000000000000000000000000000000000000000000000000000
@@ -0,0 +1,8 @@
contract test {
function f() public pure returns (bytes32) {
bytes32 escapeCharacters = "\t\b\f";
return escapeCharacters;
}
}
// ----
// ParserError 8936: (100-105): Invalid escape sequence.
@@ -1,6 +1,6 @@
contract test {
function f() public pure returns (bytes32) {
bytes32 escapeCharacters = "\t\b\n\r\f\'\"\\\b";
bytes32 escapeCharacters = "\n\r\'\"\\";
return escapeCharacters;
}
}