diff options
author | Lefteris Karapetsas <lefteris@refu.co> | 2014-12-02 01:01:42 +0800 |
---|---|---|
committer | Lefteris Karapetsas <lefteris@refu.co> | 2014-12-02 01:01:42 +0800 |
commit | 0f79ed6957c65fbe9e09ffa8f9b5e3d6dca4a210 (patch) | |
tree | 57197cdd0b93775d6716666b952ea009ceb4fab9 | |
parent | 43d6726dd78e35bf79fa2da3824c2916c5e6b0a8 (diff) | |
download | dexon-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.cpp | 48 |
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; |