aboutsummaryrefslogtreecommitdiffstats
path: root/libjulia/optimiser/ASTCopier.h
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-12-08 21:01:22 +0800
committerchriseth <chris@ethereum.org>2017-12-13 19:28:15 +0800
commit54b6739962ef45319777ce2aebafdf4b91412d84 (patch)
treed15c289ebb4e57b16678b93e223bc477e9093b6c /libjulia/optimiser/ASTCopier.h
parent7614b16dc9b2bb1e267e8f46834b40220fb9f9fb (diff)
downloaddexon-solidity-54b6739962ef45319777ce2aebafdf4b91412d84.tar
dexon-solidity-54b6739962ef45319777ce2aebafdf4b91412d84.tar.gz
dexon-solidity-54b6739962ef45319777ce2aebafdf4b91412d84.tar.bz2
dexon-solidity-54b6739962ef45319777ce2aebafdf4b91412d84.tar.lz
dexon-solidity-54b6739962ef45319777ce2aebafdf4b91412d84.tar.xz
dexon-solidity-54b6739962ef45319777ce2aebafdf4b91412d84.tar.zst
dexon-solidity-54b6739962ef45319777ce2aebafdf4b91412d84.zip
Separate expression and statement.
Diffstat (limited to 'libjulia/optimiser/ASTCopier.h')
-rw-r--r--libjulia/optimiser/ASTCopier.h59
1 files changed, 43 insertions, 16 deletions
diff --git a/libjulia/optimiser/ASTCopier.h b/libjulia/optimiser/ASTCopier.h
index 5dde2ce9..36a1ced5 100644
--- a/libjulia/optimiser/ASTCopier.h
+++ b/libjulia/optimiser/ASTCopier.h
@@ -34,28 +34,55 @@ namespace dev
namespace julia
{
+class ExpressionCopier: public boost::static_visitor<Expression>
+{
+public:
+ virtual Expression operator()(Literal const& _literal) = 0;
+ virtual Expression operator()(Identifier const& _identifier) = 0;
+ virtual Expression operator()(FunctionalInstruction const& _instr) = 0;
+ virtual Expression operator()(FunctionCall const&) = 0;
+};
+
+class StatementCopier: public boost::static_visitor<Statement>
+{
+public:
+ virtual Statement operator()(ExpressionStatement const& _statement) = 0;
+ virtual Statement operator()(Instruction const& _instruction) = 0;
+ virtual Statement operator()(Label const& _label) = 0;
+ virtual Statement operator()(StackAssignment const& _assignment) = 0;
+ virtual Statement operator()(Assignment const& _assignment) = 0;
+ virtual Statement operator()(VariableDeclaration const& _varDecl) = 0;
+ virtual Statement operator()(If const& _if) = 0;
+ virtual Statement operator()(Switch const& _switch) = 0;
+ virtual Statement operator()(FunctionDefinition const&) = 0;
+ virtual Statement operator()(ForLoop const&) = 0;
+ virtual Statement operator()(Block const& _block) = 0;
+};
+
/**
* Creates a copy of a iulia AST potentially replacing identifier names.
* Base class to be extended.
*/
-class ASTCopier: public boost::static_visitor<Statement>
+class ASTCopier: public ExpressionCopier, public StatementCopier
{
public:
- Statement operator()(Literal const& _literal);
- Statement operator()(Instruction const& _instruction);
- Statement operator()(Identifier const& _identifier);
- Statement operator()(FunctionalInstruction const& _instr);
- Statement operator()(FunctionCall const&);
- Statement operator()(Label const& _label);
- Statement operator()(StackAssignment const& _assignment);
- Statement operator()(Assignment const& _assignment);
- Statement operator()(VariableDeclaration const& _varDecl);
- Statement operator()(If const& _if);
- Statement operator()(Switch const& _switch);
- Statement operator()(FunctionDefinition const&);
- Statement operator()(ForLoop const&);
- Statement operator()(Block const& _block);
-
+ virtual Expression operator()(Literal const& _literal) override;
+ virtual Statement operator()(Instruction const& _instruction) override;
+ virtual Expression operator()(Identifier const& _identifier) override;
+ virtual Expression operator()(FunctionalInstruction const& _instr) override;
+ virtual Expression operator()(FunctionCall const&) override;
+ virtual Statement operator()(ExpressionStatement const& _statement) override;
+ virtual Statement operator()(Label const& _label) override;
+ virtual Statement operator()(StackAssignment const& _assignment) override;
+ virtual Statement operator()(Assignment const& _assignment) override;
+ virtual Statement operator()(VariableDeclaration const& _varDecl) override;
+ virtual Statement operator()(If const& _if) override;
+ virtual Statement operator()(Switch const& _switch) override;
+ virtual Statement operator()(FunctionDefinition const&) override;
+ virtual Statement operator()(ForLoop const&) override;
+ virtual Statement operator()(Block const& _block) override;
+
+ virtual Expression translate(Expression const& _expression);
virtual Statement translate(Statement const& _statement);
protected: