Do not emit Solidity-only tokens in the Scanner for Yul

And simplfiy AsmParser greatly.
This commit is contained in:
Alex Beregszaszi
2020-08-28 19:34:52 +01:00
parent bd7283ad22
commit caa329066e
10 changed files with 56 additions and 38 deletions
+30 -6
View File
@@ -595,6 +595,11 @@ BOOST_AUTO_TEST_CASE(unicode_prefix_only)
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
BOOST_CHECK_EQUAL(scanner.currentError(), ScannerError::IllegalToken);
scanner.reset(CharStream("{ unicode", ""));
scanner.setScannerMode(ScannerKind::Yul);
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "unicode");
}
BOOST_AUTO_TEST_CASE(unicode_invalid_space)
@@ -611,6 +616,13 @@ BOOST_AUTO_TEST_CASE(unicode_invalid_token)
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
BOOST_CHECK_EQUAL(scanner.currentError(), ScannerError::IllegalToken);
scanner.reset(CharStream("{ unicode test", ""));
scanner.setScannerMode(ScannerKind::Yul);
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "unicode");
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "test");
}
BOOST_AUTO_TEST_CASE(valid_unicode_literal)
@@ -638,6 +650,11 @@ BOOST_AUTO_TEST_CASE(hex_prefix_only)
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
BOOST_CHECK_EQUAL(scanner.currentError(), ScannerError::IllegalToken);
scanner.reset(CharStream("{ hex", ""));
scanner.setScannerMode(ScannerKind::Yul);
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "hex");
}
BOOST_AUTO_TEST_CASE(hex_invalid_space)
@@ -654,6 +671,13 @@ BOOST_AUTO_TEST_CASE(hex_invalid_token)
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Illegal);
BOOST_CHECK_EQUAL(scanner.currentError(), ScannerError::IllegalToken);
scanner.reset(CharStream("{ hex test", ""));
scanner.setScannerMode(ScannerKind::Yul);
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::LBrace);
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "hex");
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.currentLiteral(), "test");
}
BOOST_AUTO_TEST_CASE(valid_hex_literal)
@@ -839,12 +863,12 @@ BOOST_AUTO_TEST_CASE(solidity_keywords)
BOOST_CHECK_EQUAL(scanner.next(), Token::EOS);
scanner.reset(CharStream(keywords, ""));
scanner.setScannerMode(ScannerKind::Yul);
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::Return);
BOOST_CHECK_EQUAL(scanner.next(), Token::Byte);
BOOST_CHECK_EQUAL(scanner.next(), Token::Bool);
BOOST_CHECK_EQUAL(scanner.next(), Token::Address);
BOOST_CHECK_EQUAL(scanner.next(), Token::Var);
BOOST_CHECK_EQUAL(scanner.next(), Token::In);
BOOST_CHECK_EQUAL(scanner.currentToken(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
BOOST_CHECK_EQUAL(scanner.next(), Token::TrueLiteral);
BOOST_CHECK_EQUAL(scanner.next(), Token::FalseLiteral);
BOOST_CHECK_EQUAL(scanner.next(), Token::Identifier);
@@ -6,4 +6,4 @@ contract C {
}
}
// ----
// ParserError 1856: (72-81): Literal or identifier expected.
// ParserError 6913: (86-87): Call or assignment expected.
@@ -6,4 +6,4 @@ contract C {
}
}
// ----
// ParserError 1856: (67-76): Literal or identifier expected.
// ParserError 2314: (70-76): Expected ',' but got 'StringLiteral'
@@ -8,4 +8,4 @@ contract C {
}
}
// ----
// ParserError 1856: (92-99): Literal or identifier expected.
// ParserError 4805: (95-99): Literal expected.
@@ -2,4 +2,4 @@
let x := hex"0011"
}
// ----
// ParserError 1856: (15-24): Literal or identifier expected.
// ParserError 6913: (25-26): Call or assignment expected.
@@ -2,4 +2,4 @@
pop(hex"2233")
}
// ----
// ParserError 1856: (10-19): Literal or identifier expected.
// ParserError 2314: (13-19): Expected ',' but got 'StringLiteral'
@@ -4,4 +4,4 @@
case hex"1122" {}
}
// ----
// ParserError 1856: (33-40): Literal or identifier expected.
// ParserError 4805: (36-40): Literal expected.