aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-07-27 18:28:04 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2017-08-16 02:56:38 +0800
commit7222fac45680dd9955fd37c6245760014a19873a (patch)
treee73ed4e64e01c397d7a24fa92621a97987538a72
parent80f83169b120eab72850842b4c6f39829989a0d8 (diff)
downloaddexon-solidity-7222fac45680dd9955fd37c6245760014a19873a.tar.gz
dexon-solidity-7222fac45680dd9955fd37c6245760014a19873a.tar.zst
dexon-solidity-7222fac45680dd9955fd37c6245760014a19873a.zip
Remove DocumentationType from natspec
-rw-r--r--libsolidity/interface/CompilerStack.cpp53
-rw-r--r--libsolidity/interface/CompilerStack.h19
-rw-r--r--libsolidity/interface/StandardCompiler.cpp4
-rw-r--r--solc/CommandLineInterface.cpp35
-rw-r--r--solc/CommandLineInterface.h2
-rw-r--r--test/libsolidity/SolidityNatspecJSON.cpp4
6 files changed, 59 insertions, 58 deletions
diff --git a/libsolidity/interface/CompilerStack.cpp b/libsolidity/interface/CompilerStack.cpp
index 70bebfa5..07596b99 100644
--- a/libsolidity/interface/CompilerStack.cpp
+++ b/libsolidity/interface/CompilerStack.cpp
@@ -406,39 +406,42 @@ Json::Value const& CompilerStack::contractABI(Contract const& _contract) const
return *_contract.abi;
}
-Json::Value const& CompilerStack::natspec(string const& _contractName, DocumentationType _type) const
+Json::Value const& CompilerStack::natspecUser(string const& _contractName) const
{
- return natspec(contract(_contractName), _type);
+ return natspecUser(contract(_contractName));
}
-Json::Value const& CompilerStack::natspec(Contract const& _contract, DocumentationType _type) const
+Json::Value const& CompilerStack::natspecUser(Contract const& _contract) const
{
if (m_stackState < AnalysisSuccessful)
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Parsing was not successful."));
solAssert(_contract.contract, "");
- std::unique_ptr<Json::Value const>* doc;
- // checks wheather we already have the documentation
- switch (_type)
- {
- case DocumentationType::NatspecUser:
- doc = &_contract.userDocumentation;
- // caches the result
- if (!*doc)
- doc->reset(new Json::Value(Natspec::userDocumentation(*_contract.contract)));
- break;
- case DocumentationType::NatspecDev:
- doc = &_contract.devDocumentation;
- // caches the result
- if (!*doc)
- doc->reset(new Json::Value(Natspec::devDocumentation(*_contract.contract)));
- break;
- default:
- solAssert(false, "Illegal documentation type.");
- }
+ // caches the result
+ if (!_contract.userDocumentation)
+ _contract.userDocumentation.reset(new Json::Value(Natspec::userDocumentation(*_contract.contract)));
+
+ return *_contract.userDocumentation;
+}
+
+Json::Value const& CompilerStack::natspecDev(string const& _contractName) const
+{
+ return natspecDev(contract(_contractName));
+}
+
+Json::Value const& CompilerStack::natspecDev(Contract const& _contract) const
+{
+ if (m_stackState < AnalysisSuccessful)
+ BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Parsing was not successful."));
+
+ solAssert(_contract.contract, "");
+
+ // caches the result
+ if (!_contract.devDocumentation)
+ _contract.devDocumentation.reset(new Json::Value(Natspec::devDocumentation(*_contract.contract)));
- return *(*doc);
+ return *_contract.devDocumentation;
}
Json::Value CompilerStack::methodIdentifiers(string const& _contractName) const
@@ -819,8 +822,8 @@ string CompilerStack::createMetadata(Contract const& _contract) const
meta["settings"]["libraries"][library.first] = "0x" + toHex(library.second.asBytes());
meta["output"]["abi"] = contractABI(_contract);
- meta["output"]["userdoc"] = natspec(_contract, DocumentationType::NatspecUser);
- meta["output"]["devdoc"] = natspec(_contract, DocumentationType::NatspecDev);
+ meta["output"]["userdoc"] = natspecUser(_contract);
+ meta["output"]["devdoc"] = natspecDev(_contract);
return jsonCompactPrint(meta);
}
diff --git a/libsolidity/interface/CompilerStack.h b/libsolidity/interface/CompilerStack.h
index d287f224..54e3e23f 100644
--- a/libsolidity/interface/CompilerStack.h
+++ b/libsolidity/interface/CompilerStack.h
@@ -63,12 +63,6 @@ class Natspec;
class Error;
class DeclarationContainer;
-enum class DocumentationType: uint8_t
-{
- NatspecUser = 1,
- NatspecDev
-};
-
/**
* Easy to use and self-contained Solidity compiler with as few header dependencies as possible.
* It holds state and can be used to either step through the compilation stages (and abort e.g.
@@ -203,11 +197,13 @@ public:
/// Prerequisite: Successful call to parse or compile.
Json::Value const& contractABI(std::string const& _contractName = "") const;
- /// @returns a JSON representing the contract's documentation.
+ /// @returns a JSON representing the contract's user documentation.
+ /// Prerequisite: Successful call to parse or compile.
+ Json::Value const& natspecUser(std::string const& _contractName) const;
+
+ /// @returns a JSON representing the contract's developer documentation.
/// Prerequisite: Successful call to parse or compile.
- /// @param type The type of the documentation to get.
- /// Can be one of 4 types defined at @c DocumentationType
- Json::Value const& natspec(std::string const& _contractName, DocumentationType _type) const;
+ Json::Value const& natspecDev(std::string const& _contractName) const;
/// @returns a JSON representing a map of method identifiers (hashes) to function names.
Json::Value methodIdentifiers(std::string const& _contractName) const;
@@ -274,7 +270,8 @@ private:
std::string createMetadata(Contract const& _contract) const;
std::string computeSourceMapping(eth::AssemblyItems const& _items) const;
Json::Value const& contractABI(Contract const&) const;
- Json::Value const& natspec(Contract const&, DocumentationType _type) const;
+ Json::Value const& natspecUser(Contract const&) const;
+ Json::Value const& natspecDev(Contract const&) const;
/// @returns the offset of the entry point of the given function into the list of assembly items
/// or zero if it is not found or does not exist.
diff --git a/libsolidity/interface/StandardCompiler.cpp b/libsolidity/interface/StandardCompiler.cpp
index dd135ce5..7a6f9989 100644
--- a/libsolidity/interface/StandardCompiler.cpp
+++ b/libsolidity/interface/StandardCompiler.cpp
@@ -394,8 +394,8 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
Json::Value contractData(Json::objectValue);
contractData["abi"] = m_compilerStack.contractABI(contractName);
contractData["metadata"] = m_compilerStack.metadata(contractName);
- contractData["userdoc"] = m_compilerStack.natspec(contractName, DocumentationType::NatspecUser);
- contractData["devdoc"] = m_compilerStack.natspec(contractName, DocumentationType::NatspecDev);
+ contractData["userdoc"] = m_compilerStack.natspecUser(contractName);
+ contractData["devdoc"] = m_compilerStack.natspecDev(contractName);
// EVM
Json::Value evmData(Json::objectValue);
diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp
index 740061a1..152526f4 100644
--- a/solc/CommandLineInterface.cpp
+++ b/solc/CommandLineInterface.cpp
@@ -316,31 +316,32 @@ void CommandLineInterface::handleABI(string const& _contract)
cout << "Contract JSON ABI " << endl << data << endl;
}
-void CommandLineInterface::handleNatspec(DocumentationType _type, string const& _contract)
+void CommandLineInterface::handleNatspec(bool _natspecDev, string const& _contract)
{
std::string argName;
std::string suffix;
std::string title;
- switch(_type)
+
+ if (_natspecDev)
{
- case DocumentationType::NatspecUser:
- argName = g_argNatspecUser;
- suffix = ".docuser";
- title = "User Documentation";
- break;
- case DocumentationType::NatspecDev:
argName = g_argNatspecDev;
suffix = ".docdev";
title = "Developer Documentation";
- break;
- default:
- // should never happen
- BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment("Unknown documentation _type"));
+ }
+ else
+ {
+ argName = g_argNatspecUser;
+ suffix = ".docuser";
+ title = "User Documentation";
}
if (m_args.count(argName))
{
- std::string output = dev::jsonPrettyPrint(m_compiler->natspec(_contract, _type));
+ std::string output = dev::jsonPrettyPrint(
+ _natspecDev ?
+ m_compiler->natspecDev(_contract) :
+ m_compiler->natspecUser(_contract)
+ );
if (m_args.count(g_argOutputDir))
createFile(m_compiler->filesystemFriendlyName(_contract) + suffix, output);
@@ -881,9 +882,9 @@ void CommandLineInterface::handleCombinedJSON()
if (requests.count(g_strSignatureHashes))
contractData[g_strSignatureHashes] = m_compiler->methodIdentifiers(contractName);
if (requests.count(g_strNatspecDev))
- contractData[g_strNatspecDev] = dev::jsonCompactPrint(m_compiler->natspec(contractName, DocumentationType::NatspecDev));
+ contractData[g_strNatspecDev] = dev::jsonCompactPrint(m_compiler->natspecDev(contractName));
if (requests.count(g_strNatspecUser))
- contractData[g_strNatspecUser] = dev::jsonCompactPrint(m_compiler->natspec(contractName, DocumentationType::NatspecUser));
+ contractData[g_strNatspecUser] = dev::jsonCompactPrint(m_compiler->natspecUser(contractName));
output[g_strContracts][contractName] = contractData;
}
@@ -1170,8 +1171,8 @@ void CommandLineInterface::outputCompilationResults()
handleSignatureHashes(contract);
handleMetadata(contract);
handleABI(contract);
- handleNatspec(DocumentationType::NatspecDev, contract);
- handleNatspec(DocumentationType::NatspecUser, contract);
+ handleNatspec(true, contract);
+ handleNatspec(false, contract);
} // end of contracts iteration
if (m_args.count(g_argFormal))
diff --git a/solc/CommandLineInterface.h b/solc/CommandLineInterface.h
index 8a476ef5..bf9400e4 100644
--- a/solc/CommandLineInterface.h
+++ b/solc/CommandLineInterface.h
@@ -66,7 +66,7 @@ private:
void handleSignatureHashes(std::string const& _contract);
void handleMetadata(std::string const& _contract);
void handleABI(std::string const& _contract);
- void handleNatspec(DocumentationType _type, std::string const& _contract);
+ void handleNatspec(bool _natspecDev, std::string const& _contract);
void handleGasEstimation(std::string const& _contract);
void handleFormal();
diff --git a/test/libsolidity/SolidityNatspecJSON.cpp b/test/libsolidity/SolidityNatspecJSON.cpp
index be20a9f2..149221d5 100644
--- a/test/libsolidity/SolidityNatspecJSON.cpp
+++ b/test/libsolidity/SolidityNatspecJSON.cpp
@@ -51,9 +51,9 @@ public:
Json::Value generatedDocumentation;
if (_userDocumentation)
- generatedDocumentation = m_compilerStack.natspec("", DocumentationType::NatspecUser);
+ generatedDocumentation = m_compilerStack.natspecUser("");
else
- generatedDocumentation = m_compilerStack.natspec("", DocumentationType::NatspecDev);
+ generatedDocumentation = m_compilerStack.natspecDev("");
Json::Value expectedDocumentation;
m_reader.parse(_expectedDocumentationString, expectedDocumentation);
BOOST_CHECK_MESSAGE(