aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--solidityNameAndTypeResolution.cpp32
-rw-r--r--solidityParser.cpp26
-rw-r--r--solidityScanner.cpp155
3 files changed, 115 insertions, 98 deletions
diff --git a/solidityNameAndTypeResolution.cpp b/solidityNameAndTypeResolution.cpp
index d2f99e83..ed2cb7b5 100644
--- a/solidityNameAndTypeResolution.cpp
+++ b/solidityNameAndTypeResolution.cpp
@@ -29,19 +29,23 @@
#include <libsolidity/Exceptions.h>
#include <boost/test/unit_test.hpp>
-namespace dev {
-namespace solidity {
-namespace test {
+namespace dev
+{
+namespace solidity
+{
+namespace test
+{
-namespace {
- void parseTextAndResolveNames(const std::string& _source)
- {
- Parser parser;
- ptr<ContractDefinition> contract = parser.parse(
- std::make_shared<Scanner>(CharStream(_source)));
- NameAndTypeResolver resolver;
- resolver.resolveNamesAndTypes(*contract);
- }
+namespace
+{
+void parseTextAndResolveNames(const std::string& _source)
+{
+ Parser parser;
+ ptr<ContractDefinition> contract = parser.parse(
+ std::make_shared<Scanner>(CharStream(_source)));
+ NameAndTypeResolver resolver;
+ resolver.resolveNamesAndTypes(*contract);
+}
}
BOOST_AUTO_TEST_SUITE(SolidityNameAndTypeResolution)
@@ -168,5 +172,7 @@ BOOST_AUTO_TEST_CASE(type_inference_explicit_conversion)
BOOST_AUTO_TEST_SUITE_END()
-} } } // end namespaces
+}
+}
+} // end namespaces
diff --git a/solidityParser.cpp b/solidityParser.cpp
index b1f27bcb..ef434cc3 100644
--- a/solidityParser.cpp
+++ b/solidityParser.cpp
@@ -28,16 +28,20 @@
#include <libsolidity/Exceptions.h>
#include <boost/test/unit_test.hpp>
-namespace dev {
-namespace solidity {
-namespace test {
+namespace dev
+{
+namespace solidity
+{
+namespace test
+{
-namespace {
- ptr<ASTNode> parseText(const std::string& _source)
- {
- Parser parser;
- return parser.parse(std::make_shared<Scanner>(CharStream(_source)));
- }
+namespace
+{
+ptr<ASTNode> parseText(const std::string& _source)
+{
+ Parser parser;
+ return parser.parse(std::make_shared<Scanner>(CharStream(_source)));
+}
}
BOOST_AUTO_TEST_SUITE(SolidityParser)
@@ -211,5 +215,7 @@ BOOST_AUTO_TEST_CASE(else_if_statement)
BOOST_AUTO_TEST_SUITE_END()
-} } } // end namespaces
+}
+}
+} // end namespaces
diff --git a/solidityScanner.cpp b/solidityScanner.cpp
index 759d2f10..d2a960cf 100644
--- a/solidityScanner.cpp
+++ b/solidityScanner.cpp
@@ -23,116 +23,121 @@
#include <libsolidity/Scanner.h>
#include <boost/test/unit_test.hpp>
-namespace dev {
-namespace solidity {
-namespace test {
+namespace dev
+{
+namespace solidity
+{
+namespace test
+{
BOOST_AUTO_TEST_SUITE(SolidityScanner)
BOOST_AUTO_TEST_CASE(test_empty)
{
- Scanner scanner(CharStream(""));
- BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::EOS);
+ Scanner scanner(CharStream(""));
+ BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::EOS);
}
BOOST_AUTO_TEST_CASE(smoke_test)
{
- Scanner scanner(CharStream("function break;765 \t \"string1\",'string2'\nidentifier1"));
- BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::FUNCTION);
- BOOST_CHECK_EQUAL(scanner.next(), Token::BREAK);
- BOOST_CHECK_EQUAL(scanner.next(), Token::SEMICOLON);
- BOOST_CHECK_EQUAL(scanner.next(), Token::NUMBER);
- BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "765");
- BOOST_CHECK_EQUAL(scanner.next(), Token::STRING_LITERAL);
- BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "string1");
- BOOST_CHECK_EQUAL(scanner.next(), Token::COMMA);
- BOOST_CHECK_EQUAL(scanner.next(), Token::STRING_LITERAL);
- BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "string2");
- BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
- BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "identifier1");
- BOOST_CHECK_EQUAL(scanner.next(), Token::EOS);
+ Scanner scanner(CharStream("function break;765 \t \"string1\",'string2'\nidentifier1"));
+ BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::FUNCTION);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::BREAK);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::SEMICOLON);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::NUMBER);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "765");
+ BOOST_CHECK_EQUAL(scanner.next(), Token::STRING_LITERAL);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "string1");
+ BOOST_CHECK_EQUAL(scanner.next(), Token::COMMA);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::STRING_LITERAL);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "string2");
+ BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "identifier1");
+ BOOST_CHECK_EQUAL(scanner.next(), Token::EOS);
}
BOOST_AUTO_TEST_CASE(string_escapes)
{
- Scanner scanner(CharStream(" { \"a\\x61\""));
- BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::LBRACE);
- BOOST_CHECK_EQUAL(scanner.next(), Token::STRING_LITERAL);
- BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "aa");
+ Scanner scanner(CharStream(" { \"a\\x61\""));
+ BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::LBRACE);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::STRING_LITERAL);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "aa");
}
BOOST_AUTO_TEST_CASE(string_escapes_with_zero)
{
- Scanner scanner(CharStream(" { \"a\\x61\\x00abc\""));
- BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::LBRACE);
- BOOST_CHECK_EQUAL(scanner.next(), Token::STRING_LITERAL);
- BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), std::string("aa\0abc", 6));
+ Scanner scanner(CharStream(" { \"a\\x61\\x00abc\""));
+ BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::LBRACE);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::STRING_LITERAL);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), std::string("aa\0abc", 6));
}
BOOST_AUTO_TEST_CASE(string_escape_illegal)
{
- Scanner scanner(CharStream(" bla \"\\x6rf\" (illegalescape)"));
- BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::IDENTIFIER);
- BOOST_CHECK_EQUAL(scanner.next(), Token::ILLEGAL);
- BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "");
- // TODO recovery from illegal tokens should be improved
- BOOST_CHECK_EQUAL(scanner.next(), Token::ILLEGAL);
- BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
- BOOST_CHECK_EQUAL(scanner.next(), Token::ILLEGAL);
- BOOST_CHECK_EQUAL(scanner.next(), Token::EOS);
+ Scanner scanner(CharStream(" bla \"\\x6rf\" (illegalescape)"));
+ BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::IDENTIFIER);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::ILLEGAL);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "");
+ // TODO recovery from illegal tokens should be improved
+ BOOST_CHECK_EQUAL(scanner.next(), Token::ILLEGAL);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::ILLEGAL);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::EOS);
}
BOOST_AUTO_TEST_CASE(hex_numbers)
{
- Scanner scanner(CharStream("var x = 0x765432536763762734623472346;"));
- BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::VAR);
- BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
- BOOST_CHECK_EQUAL(scanner.next(), Token::ASSIGN);
- BOOST_CHECK_EQUAL(scanner.next(), Token::NUMBER);
- BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "0x765432536763762734623472346");
- BOOST_CHECK_EQUAL(scanner.next(), Token::SEMICOLON);
- BOOST_CHECK_EQUAL(scanner.next(), Token::EOS);
+ Scanner scanner(CharStream("var x = 0x765432536763762734623472346;"));
+ BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::VAR);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::ASSIGN);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::NUMBER);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLiteral(), "0x765432536763762734623472346");
+ BOOST_CHECK_EQUAL(scanner.next(), Token::SEMICOLON);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::EOS);
}
BOOST_AUTO_TEST_CASE(locations)
{
- Scanner scanner(CharStream("function_identifier has ; -0x743/*comment*/\n ident //comment"));
- BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::IDENTIFIER);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 0);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 19);
- BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 20);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 23);
- BOOST_CHECK_EQUAL(scanner.next(), Token::SEMICOLON);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 24);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 25);
- BOOST_CHECK_EQUAL(scanner.next(), Token::SUB);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 26);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 27);
- BOOST_CHECK_EQUAL(scanner.next(), Token::NUMBER);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 27);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 32);
- BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 45);
- BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 50);
- BOOST_CHECK_EQUAL(scanner.next(), Token::EOS);
+ Scanner scanner(CharStream("function_identifier has ; -0x743/*comment*/\n ident //comment"));
+ BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::IDENTIFIER);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 0);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 19);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 20);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 23);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::SEMICOLON);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 24);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 25);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::SUB);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 26);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 27);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::NUMBER);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 27);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 32);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().start, 45);
+ BOOST_CHECK_EQUAL(scanner.getCurrentLocation().end, 50);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::EOS);
}
BOOST_AUTO_TEST_CASE(ambiguities)
{
- // test scanning of some operators which need look-ahead
- Scanner scanner(CharStream("<=""<""+ +=a++ =>""<<"));
- BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::LTE);
- BOOST_CHECK_EQUAL(scanner.next(), Token::LT);
- BOOST_CHECK_EQUAL(scanner.next(), Token::ADD);
- BOOST_CHECK_EQUAL(scanner.next(), Token::ASSIGN_ADD);
- BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
- BOOST_CHECK_EQUAL(scanner.next(), Token::INC);
- BOOST_CHECK_EQUAL(scanner.next(), Token::ARROW);
- BOOST_CHECK_EQUAL(scanner.next(), Token::SHL);
+ // test scanning of some operators which need look-ahead
+ Scanner scanner(CharStream("<=""<""+ +=a++ =>""<<"));
+ BOOST_CHECK_EQUAL(scanner.getCurrentToken(), Token::LTE);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::LT);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::ADD);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::ASSIGN_ADD);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::IDENTIFIER);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::INC);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::ARROW);
+ BOOST_CHECK_EQUAL(scanner.next(), Token::SHL);
}
BOOST_AUTO_TEST_SUITE_END()
-} } } // end namespaces
+}
+}
+} // end namespaces