aboutsummaryrefslogtreecommitdiffstats
path: root/libevmasm/ExpressionClasses.h
diff options
context:
space:
mode:
authorchriseth <c@ethdev.com>2017-01-06 23:16:11 +0800
committerchriseth <c@ethdev.com>2017-01-13 00:52:26 +0800
commitf1a4976ce65bd4730f72b0805635e818ad6334f7 (patch)
tree2bf69e7ff15a1ea23706b6c662f29f9dfc87b863 /libevmasm/ExpressionClasses.h
parenta3b01eca27b19311a05b9c7b7e2ed8eb51b0e51c (diff)
downloaddexon-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.h67
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;
-};
-
}
}