diff options
author | chriseth <chris@ethereum.org> | 2017-08-23 19:26:43 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-23 19:26:43 +0800 |
commit | c5f11d938f6670d9dbe0d7212097089c757fd91a (patch) | |
tree | eaebaac04092d5b05a5cba1211b046467d3263ae /libsolidity/ast/ASTJsonConverter.h | |
parent | 0ffc5db82b24b4897d5d09cebbaadba37fa63b45 (diff) | |
parent | 4b56829ac3dc28ea9ca6945fee22963149bcc2bd (diff) | |
download | dexon-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.h | 13 |
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; |