aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/ast/ASTJsonConverter.h
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-08-23 19:26:43 +0800
committerGitHub <noreply@github.com>2017-08-23 19:26:43 +0800
commitc5f11d938f6670d9dbe0d7212097089c757fd91a (patch)
treeeaebaac04092d5b05a5cba1211b046467d3263ae /libsolidity/ast/ASTJsonConverter.h
parent0ffc5db82b24b4897d5d09cebbaadba37fa63b45 (diff)
parent4b56829ac3dc28ea9ca6945fee22963149bcc2bd (diff)
downloaddexon-solidity-c5f11d938f6670d9dbe0d7212097089c757fd91a.tar.gz
dexon-solidity-c5f11d938f6670d9dbe0d7212097089c757fd91a.tar.zst
dexon-solidity-c5f11d938f6670d9dbe0d7212097089c757fd91a.zip
Merge pull request #2656 from ethereum/performance1
Avoid some Json copy operations.
Diffstat (limited to 'libsolidity/ast/ASTJsonConverter.h')
-rw-r--r--libsolidity/ast/ASTJsonConverter.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h
index 380ae2c0..60c660c1 100644
--- a/libsolidity/ast/ASTJsonConverter.h
+++ b/libsolidity/ast/ASTJsonConverter.h
@@ -49,13 +49,16 @@ public:
);
/// Output the json representation of the AST to _stream.
void print(std::ostream& _stream, ASTNode const& _node);
- Json::Value toJson(ASTNode const& _node);
+ Json::Value&& toJson(ASTNode const& _node);
template <class T>
Json::Value toJson(std::vector<ASTPointer<T>> const& _nodes)
{
Json::Value ret(Json::arrayValue);
for (auto const& n: _nodes)
- ret.append(n ? toJson(*n) : Json::nullValue);
+ if (n)
+ appendMove(ret, toJson(*n));
+ else
+ ret.append(Json::nullValue);
return ret;
}
bool visit(SourceUnit const& _node) override;
@@ -154,6 +157,12 @@ private:
std::vector<std::pair<std::string, Json::Value>> &_attributes,
ExpressionAnnotation const& _annotation
);
+ static void appendMove(Json::Value& _array, Json::Value&& _value)
+ {
+ solAssert(_array.isArray(), "");
+ _array.append(std::move(_value));
+ }
+
bool m_legacy = false; ///< if true, use legacy format
bool m_inEvent = false; ///< whether we are currently inside an event or not
Json::Value m_currentValue;