mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Adding Libraries as source units
This commit is contained in:
parent
75498a48d8
commit
7b709c7c8a
@ -58,14 +58,15 @@ CompilerStack::CompilerStack(bool _addStandardSources):
|
|||||||
m_addStandardSources(_addStandardSources), m_parseSuccessful(false)
|
m_addStandardSources(_addStandardSources), m_parseSuccessful(false)
|
||||||
{
|
{
|
||||||
if (m_addStandardSources)
|
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;
|
bool existed = m_sources.count(_name) != 0;
|
||||||
reset(true);
|
reset(true);
|
||||||
m_sources[_name].scanner = make_shared<Scanner>(CharStream(expanded(_content)), _name);
|
m_sources[_name].scanner = make_shared<Scanner>(CharStream(expanded(_content)), _name);
|
||||||
|
m_sources[_name].isLibrary = _isLibrary;
|
||||||
return existed;
|
return existed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -328,6 +329,7 @@ void CompilerStack::resolveImports()
|
|||||||
};
|
};
|
||||||
|
|
||||||
for (auto const& sourcePair: m_sources)
|
for (auto const& sourcePair: m_sources)
|
||||||
|
if (!sourcePair.second.isLibrary)
|
||||||
toposort(&sourcePair.second);
|
toposort(&sourcePair.second);
|
||||||
|
|
||||||
swap(m_sourceOrder, sourceOrder);
|
swap(m_sourceOrder, sourceOrder);
|
||||||
|
@ -64,8 +64,8 @@ public:
|
|||||||
|
|
||||||
/// Adds a source object (e.g. file) to the parser. After this, parse has to be called again.
|
/// 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.
|
/// @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); }
|
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 addSource(std::string const& _name, std::string const& _content, bool _isLibrary = false);
|
||||||
void setSource(std::string const& _sourceCode);
|
void setSource(std::string const& _sourceCode);
|
||||||
/// Parses all source units that were added
|
/// Parses all source units that were added
|
||||||
void parse();
|
void parse();
|
||||||
@ -125,7 +125,8 @@ private:
|
|||||||
std::shared_ptr<Scanner> scanner;
|
std::shared_ptr<Scanner> scanner;
|
||||||
std::shared_ptr<SourceUnit> ast;
|
std::shared_ptr<SourceUnit> ast;
|
||||||
std::string interface;
|
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
|
struct Contract
|
||||||
|
Loading…
Reference in New Issue
Block a user