diff options
author | Lefteris Karapetsas <lefteris@refu.co> | 2015-02-21 01:15:34 +0800 |
---|---|---|
committer | Lefteris Karapetsas <lefteris@refu.co> | 2015-02-21 23:03:44 +0800 |
commit | 7b709c7c8ad1553feabd294f83e3b7ce2281114a (patch) | |
tree | 63d0ac75e9f3e0f8ad138ff0584851141f2ea0d2 | |
parent | 75498a48d83277240605b43e27197be36c02ce23 (diff) | |
download | dexon-solidity-7b709c7c8ad1553feabd294f83e3b7ce2281114a.tar dexon-solidity-7b709c7c8ad1553feabd294f83e3b7ce2281114a.tar.gz dexon-solidity-7b709c7c8ad1553feabd294f83e3b7ce2281114a.tar.bz2 dexon-solidity-7b709c7c8ad1553feabd294f83e3b7ce2281114a.tar.lz dexon-solidity-7b709c7c8ad1553feabd294f83e3b7ce2281114a.tar.xz dexon-solidity-7b709c7c8ad1553feabd294f83e3b7ce2281114a.tar.zst dexon-solidity-7b709c7c8ad1553feabd294f83e3b7ce2281114a.zip |
Adding Libraries as source units
-rw-r--r-- | CompilerStack.cpp | 8 | ||||
-rw-r--r-- | CompilerStack.h | 7 |
2 files changed, 9 insertions, 6 deletions
diff --git a/CompilerStack.cpp b/CompilerStack.cpp index ca9c75bc..a5cd9198 100644 --- a/CompilerStack.cpp +++ b/CompilerStack.cpp @@ -58,14 +58,15 @@ CompilerStack::CompilerStack(bool _addStandardSources): m_addStandardSources(_addStandardSources), m_parseSuccessful(false) { if (m_addStandardSources) - addSources(StandardSources); + addSources(StandardSources, true); // add them as libraries } -bool CompilerStack::addSource(string const& _name, string const& _content) +bool CompilerStack::addSource(string const& _name, string const& _content, bool _isLibrary) { bool existed = m_sources.count(_name) != 0; reset(true); m_sources[_name].scanner = make_shared<Scanner>(CharStream(expanded(_content)), _name); + m_sources[_name].isLibrary = _isLibrary; return existed; } @@ -328,7 +329,8 @@ void CompilerStack::resolveImports() }; for (auto const& sourcePair: m_sources) - toposort(&sourcePair.second); + if (!sourcePair.second.isLibrary) + toposort(&sourcePair.second); swap(m_sourceOrder, sourceOrder); } diff --git a/CompilerStack.h b/CompilerStack.h index cb4770cd..c9642745 100644 --- a/CompilerStack.h +++ b/CompilerStack.h @@ -64,8 +64,8 @@ public: /// Adds a source object (e.g. file) to the parser. After this, parse has to be called again. /// @returns true if a source object by the name already existed and was replaced. - void addSources(std::map<std::string, std::string> const& _nameContents) { for (auto const& i: _nameContents) addSource(i.first, i.second); } - bool addSource(std::string const& _name, std::string const& _content); + void addSources(std::map<std::string, std::string> const& _nameContents, bool _isLibrary = false) { for (auto const& i: _nameContents) addSource(i.first, i.second, _isLibrary); } + bool addSource(std::string const& _name, std::string const& _content, bool _isLibrary = false); void setSource(std::string const& _sourceCode); /// Parses all source units that were added void parse(); @@ -125,7 +125,8 @@ private: std::shared_ptr<Scanner> scanner; std::shared_ptr<SourceUnit> ast; std::string interface; - void reset() { scanner.reset(); ast.reset(); interface.clear(); } + bool isLibrary; + void reset() { scanner.reset(); ast.reset(); interface.clear(); isLibrary = false;} }; struct Contract |