aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLefteris Karapetsas <lefteris@refu.co>2014-12-02 01:01:42 +0800
committerLefteris Karapetsas <lefteris@refu.co>2014-12-02 01:01:42 +0800
commit0f79ed6957c65fbe9e09ffa8f9b5e3d6dca4a210 (patch)
tree57197cdd0b93775d6716666b952ea009ceb4fab9
parent43d6726dd78e35bf79fa2da3824c2916c5e6b0a8 (diff)
downloaddexon-solidity-0f79ed6957c65fbe9e09ffa8f9b5e3d6dca4a210.tar
dexon-solidity-0f79ed6957c65fbe9e09ffa8f9b5e3d6dca4a210.tar.gz
dexon-solidity-0f79ed6957c65fbe9e09ffa8f9b5e3d6dca4a210.tar.bz2
dexon-solidity-0f79ed6957c65fbe9e09ffa8f9b5e3d6dca4a210.tar.lz
dexon-solidity-0f79ed6957c65fbe9e09ffa8f9b5e3d6dca4a210.tar.xz
dexon-solidity-0f79ed6957c65fbe9e09ffa8f9b5e3d6dca4a210.tar.zst
dexon-solidity-0f79ed6957c65fbe9e09ffa8f9b5e3d6dca4a210.zip
Using jsoncpp for exporting ABI interface from solidity
- Also changing the interface JSON test to have a shorter name plus to provide meaningful error message in case of failure
-rw-r--r--CompilerStack.cpp48
1 files changed, 23 insertions, 25 deletions
diff --git a/CompilerStack.cpp b/CompilerStack.cpp
index 45d3e0b8..e25438f7 100644
--- a/CompilerStack.cpp
+++ b/CompilerStack.cpp
@@ -85,54 +85,52 @@ void CompilerStack::streamAssembly(ostream& _outStream)
string const& CompilerStack::getInterface()
{
+ Json::StyledWriter writer;
if (!m_parseSuccessful)
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Parsing was not successful."));
+
if (m_interface.empty())
{
- stringstream interface;
- interface << '[';
+ Json::Value methods(Json::arrayValue);
+
vector<FunctionDefinition const*> exportedFunctions = m_contractASTNode->getInterfaceFunctions();
- unsigned functionsCount = exportedFunctions.size();
for (FunctionDefinition const* f: exportedFunctions)
{
- auto streamVariables = [&](vector<ASTPointer<VariableDeclaration>> const& _vars)
+ Json::Value method;
+ Json::Value inputs(Json::arrayValue);
+ Json::Value outputs(Json::arrayValue);
+
+ auto streamVariables = [&](vector<ASTPointer<VariableDeclaration>> const& _vars,
+ Json::Value &json)
{
- unsigned varCount = _vars.size();
for (ASTPointer<VariableDeclaration> const& var: _vars)
{
- interface << "{"
- << "\"name\":" << escaped(var->getName(), false) << ","
- << "\"type\":" << escaped(var->getType()->toString(), false)
- << "}";
- if (--varCount > 0)
- interface << ",";
+ Json::Value input;
+ input["name"] = var->getName();
+ input["type"] = var->getType()->toString();
+ json.append(input);
}
};
- interface << '{'
- << "\"name\":" << escaped(f->getName(), false) << ","
- << "\"inputs\":[";
- streamVariables(f->getParameters());
- interface << "],"
- << "\"outputs\":[";
- streamVariables(f->getReturnParameters());
- interface << "]"
- << "}";
- if (--functionsCount > 0)
- interface << ",";
+ method["name"] = f->getName();
+ streamVariables(f->getParameters(), inputs);
+ method["inputs"] = inputs;
+ streamVariables(f->getReturnParameters(), outputs);
+ method["outputs"] = outputs;
+
+ methods.append(method);
}
- interface << ']';
- m_interface = interface.str();
+ m_interface = writer.write(methods);
}
return m_interface;
}
string const& CompilerStack::getDocumentation()
{
-
Json::StyledWriter writer;
if (!m_parseSuccessful)
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Parsing was not successful."));
+
if (m_documentation.empty())
{
Json::Value doc;