aboutsummaryrefslogtreecommitdiffstats
path: root/solidityCompiler.cpp
diff options
context:
space:
mode:
authorChristian <c@ethdev.com>2014-12-03 14:46:55 +0800
committerChristian <c@ethdev.com>2014-12-03 17:44:46 +0800
commit5b6a211b8aea80fc857e043fe5eb33f43c3f7df4 (patch)
tree3f50bd614fff7fcf75c71f82a82733d4dfc4ef82 /solidityCompiler.cpp
parente7201a032429534b4cde33c21c00777c04448b15 (diff)
downloaddexon-solidity-5b6a211b8aea80fc857e043fe5eb33f43c3f7df4.tar.gz
dexon-solidity-5b6a211b8aea80fc857e043fe5eb33f43c3f7df4.tar.zst
dexon-solidity-5b6a211b8aea80fc857e043fe5eb33f43c3f7df4.zip
Import directive.
Diffstat (limited to 'solidityCompiler.cpp')
-rw-r--r--solidityCompiler.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/solidityCompiler.cpp b/solidityCompiler.cpp
index 3e86919a..883cecf2 100644
--- a/solidityCompiler.cpp
+++ b/solidityCompiler.cpp
@@ -46,16 +46,22 @@ namespace
bytes compileContract(const string& _sourceCode)
{
Parser parser;
- ASTPointer<ContractDefinition> contract;
- BOOST_REQUIRE_NO_THROW(contract = parser.parse(make_shared<Scanner>(CharStream(_sourceCode))));
- NameAndTypeResolver resolver({});
- BOOST_REQUIRE_NO_THROW(resolver.resolveNamesAndTypes(*contract));
-
- Compiler compiler;
- compiler.compileContract(*contract, {});
- // debug
- //compiler.streamAssembly(cout);
- return compiler.getAssembledBytecode();
+ ASTPointer<SourceUnit> sourceUnit;
+ BOOST_REQUIRE_NO_THROW(sourceUnit = parser.parse(make_shared<Scanner>(CharStream(_sourceCode))));
+ for (ASTPointer<ASTNode> const& node: sourceUnit->getNodes())
+ if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
+ {
+ NameAndTypeResolver resolver({});
+ BOOST_REQUIRE_NO_THROW(resolver.resolveNamesAndTypes(*contract));
+
+ Compiler compiler;
+ compiler.compileContract(*contract, {});
+ // debug
+ //compiler.streamAssembly(cout);
+ return compiler.getAssembledBytecode();
+ }
+ BOOST_FAIL("No contract found in source.");
+ return bytes();
}
/// Checks that @a _compiledCode is present starting from offset @a _offset in @a _expectation.