diff options
author | chriseth <c@ethdev.com> | 2017-01-06 23:16:11 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2017-01-13 00:52:26 +0800 |
commit | f1a4976ce65bd4730f72b0805635e818ad6334f7 (patch) | |
tree | 2bf69e7ff15a1ea23706b6c662f29f9dfc87b863 /libevmasm/ExpressionClasses.h | |
parent | a3b01eca27b19311a05b9c7b7e2ed8eb51b0e51c (diff) | |
download | dexon-solidity-f1a4976ce65bd4730f72b0805635e818ad6334f7.tar.gz dexon-solidity-f1a4976ce65bd4730f72b0805635e818ad6334f7.tar.zst dexon-solidity-f1a4976ce65bd4730f72b0805635e818ad6334f7.zip |
Optimise simplification rules (sort into bins).
Diffstat (limited to 'libevmasm/ExpressionClasses.h')
-rw-r--r-- | libevmasm/ExpressionClasses.h | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/libevmasm/ExpressionClasses.h b/libevmasm/ExpressionClasses.h index c91b227f..5d53b292 100644 --- a/libevmasm/ExpressionClasses.h +++ b/libevmasm/ExpressionClasses.h @@ -121,72 +121,5 @@ private: std::vector<std::shared_ptr<AssemblyItem>> m_spareAssemblyItems; }; -/** - * Pattern to match against an expression. - * Also stores matched expressions to retrieve them later, for constructing new expressions using - * ExpressionTemplate. - */ -class Pattern -{ -public: - using Expression = ExpressionClasses::Expression; - using Id = ExpressionClasses::Id; - - // Matches a specific constant value. - Pattern(unsigned _value): Pattern(u256(_value)) {} - // Matches a specific constant value. - Pattern(u256 const& _value): m_type(Push), m_requireDataMatch(true), m_data(std::make_shared<u256>(_value)) {} - // Matches a specific assembly item type or anything if not given. - Pattern(AssemblyItemType _type = UndefinedItem): m_type(_type) {} - // Matches a given instruction with given arguments - Pattern(Instruction _instruction, std::vector<Pattern> const& _arguments = {}); - /// Sets this pattern to be part of the match group with the identifier @a _group. - /// Inside one rule, all patterns in the same match group have to match expressions from the - /// same expression equivalence class. - void setMatchGroup(unsigned _group, std::map<unsigned, Expression const*>& _matchGroups); - unsigned matchGroup() const { return m_matchGroup; } - bool matches(Expression const& _expr, ExpressionClasses const& _classes) const; - - AssemblyItem toAssemblyItem(SourceLocation const& _location) const; - std::vector<Pattern> arguments() const { return m_arguments; } - - /// @returns the id of the matched expression if this pattern is part of a match group. - Id id() const { return matchGroupValue().id; } - /// @returns the data of the matched expression if this pattern is part of a match group. - u256 const& d() const { return matchGroupValue().item->data(); } - - std::string toString() const; - -private: - bool matchesBaseItem(AssemblyItem const* _item) const; - Expression const& matchGroupValue() const; - u256 const& data() const; - - AssemblyItemType m_type; - bool m_requireDataMatch = false; - Instruction m_instruction; ///< Only valid if m_type is Operation - std::shared_ptr<u256> m_data; ///< Only valid if m_type is not Operation - std::vector<Pattern> m_arguments; - unsigned m_matchGroup = 0; - std::map<unsigned, Expression const*>* m_matchGroups = nullptr; -}; - -/** - * Template for a new expression that can be built from matched patterns. - */ -struct ExpressionTemplate -{ - using Expression = ExpressionClasses::Expression; - using Id = ExpressionClasses::Id; - explicit ExpressionTemplate(Pattern const& _pattern, SourceLocation const& _location); - std::string toString() const; - bool hasId = false; - /// Id of the matched expression, if available. - Id id = Id(-1); - // Otherwise, assembly item. - AssemblyItem item = UndefinedItem; - std::vector<ExpressionTemplate> arguments; -}; - } } |