summaryrefslogtreecommitdiff
path: root/src/expr-visitor.h
diff options
context:
space:
mode:
authorBen Smith <binjimin@gmail.com>2017-06-23 18:41:59 -0700
committerGitHub <noreply@github.com>2017-06-23 18:41:59 -0700
commit29e8e9ee0068b0f90f30c69c4f6c0c3fd30bf96e (patch)
tree07ac2e58343a65309726118ab2908a61a7144f05 /src/expr-visitor.h
parent72edc598a20d79d5d19caf7b397be4254a7d5fb8 (diff)
downloadwabt-29e8e9ee0068b0f90f30c69c4f6c0c3fd30bf96e.tar.gz
wabt-29e8e9ee0068b0f90f30c69c4f6c0c3fd30bf96e.tar.bz2
wabt-29e8e9ee0068b0f90f30c69c4f6c0c3fd30bf96e.zip
Refactor Expr as class hierarchy instead of union (#524)
This has the benefit of making things much more type-safe, as well as simplifying destroying member variables. For now, many of the members are still raw pointers, but they probably should become unique_ptrs or ordinary values.
Diffstat (limited to 'src/expr-visitor.h')
-rw-r--r--src/expr-visitor.h149
1 files changed, 73 insertions, 76 deletions
diff --git a/src/expr-visitor.h b/src/expr-visitor.h
index 99a74ec1..3c8b6b5f 100644
--- a/src/expr-visitor.h
+++ b/src/expr-visitor.h
@@ -18,13 +18,10 @@
#define WABT_EXPR_VISITOR_H_
#include "common.h"
+#include "ir.h"
namespace wabt {
-struct Catch;
-struct Expr;
-struct Func;
-
class ExprVisitor {
public:
class Delegate;
@@ -44,82 +41,82 @@ class ExprVisitor::Delegate {
public:
virtual ~Delegate() {}
- virtual Result OnBinaryExpr(Expr*) = 0;
- virtual Result BeginBlockExpr(Expr*) = 0;
- virtual Result EndBlockExpr(Expr*) = 0;
- virtual Result OnBrExpr(Expr*) = 0;
- virtual Result OnBrIfExpr(Expr*) = 0;
- virtual Result OnBrTableExpr(Expr*) = 0;
- virtual Result OnCallExpr(Expr*) = 0;
- virtual Result OnCallIndirectExpr(Expr*) = 0;
- virtual Result OnCompareExpr(Expr*) = 0;
- virtual Result OnConstExpr(Expr*) = 0;
- virtual Result OnConvertExpr(Expr*) = 0;
- virtual Result OnCurrentMemoryExpr(Expr*) = 0;
- virtual Result OnDropExpr(Expr*) = 0;
- virtual Result OnGetGlobalExpr(Expr*) = 0;
- virtual Result OnGetLocalExpr(Expr*) = 0;
- virtual Result OnGrowMemoryExpr(Expr*) = 0;
- virtual Result BeginIfExpr(Expr*) = 0;
- virtual Result AfterIfTrueExpr(Expr*) = 0;
- virtual Result EndIfExpr(Expr*) = 0;
- virtual Result OnLoadExpr(Expr*) = 0;
- virtual Result BeginLoopExpr(Expr*) = 0;
- virtual Result EndLoopExpr(Expr*) = 0;
- virtual Result OnNopExpr(Expr*) = 0;
- virtual Result OnReturnExpr(Expr*) = 0;
- virtual Result OnSelectExpr(Expr*) = 0;
- virtual Result OnSetGlobalExpr(Expr*) = 0;
- virtual Result OnSetLocalExpr(Expr*) = 0;
- virtual Result OnStoreExpr(Expr*) = 0;
- virtual Result OnTeeLocalExpr(Expr*) = 0;
- virtual Result OnUnaryExpr(Expr*) = 0;
- virtual Result OnUnreachableExpr(Expr*) = 0;
- virtual Result BeginTryExpr(Expr*) = 0;
- virtual Result EndTryExpr(Expr*) = 0;
- virtual Result OnCatchExpr(Expr*, Catch*) = 0;
- virtual Result OnThrowExpr(Expr*) = 0;
- virtual Result OnRethrowExpr(Expr*) = 0;
+ virtual Result OnBinaryExpr(BinaryExpr*) = 0;
+ virtual Result BeginBlockExpr(BlockExpr*) = 0;
+ virtual Result EndBlockExpr(BlockExpr*) = 0;
+ virtual Result OnBrExpr(BrExpr*) = 0;
+ virtual Result OnBrIfExpr(BrIfExpr*) = 0;
+ virtual Result OnBrTableExpr(BrTableExpr*) = 0;
+ virtual Result OnCallExpr(CallExpr*) = 0;
+ virtual Result OnCallIndirectExpr(CallIndirectExpr*) = 0;
+ virtual Result OnCompareExpr(CompareExpr*) = 0;
+ virtual Result OnConstExpr(ConstExpr*) = 0;
+ virtual Result OnConvertExpr(ConvertExpr*) = 0;
+ virtual Result OnCurrentMemoryExpr(CurrentMemoryExpr*) = 0;
+ virtual Result OnDropExpr(DropExpr*) = 0;
+ virtual Result OnGetGlobalExpr(GetGlobalExpr*) = 0;
+ virtual Result OnGetLocalExpr(GetLocalExpr*) = 0;
+ virtual Result OnGrowMemoryExpr(GrowMemoryExpr*) = 0;
+ virtual Result BeginIfExpr(IfExpr*) = 0;
+ virtual Result AfterIfTrueExpr(IfExpr*) = 0;
+ virtual Result EndIfExpr(IfExpr*) = 0;
+ virtual Result OnLoadExpr(LoadExpr*) = 0;
+ virtual Result BeginLoopExpr(LoopExpr*) = 0;
+ virtual Result EndLoopExpr(LoopExpr*) = 0;
+ virtual Result OnNopExpr(NopExpr*) = 0;
+ virtual Result OnReturnExpr(ReturnExpr*) = 0;
+ virtual Result OnSelectExpr(SelectExpr*) = 0;
+ virtual Result OnSetGlobalExpr(SetGlobalExpr*) = 0;
+ virtual Result OnSetLocalExpr(SetLocalExpr*) = 0;
+ virtual Result OnStoreExpr(StoreExpr*) = 0;
+ virtual Result OnTeeLocalExpr(TeeLocalExpr*) = 0;
+ virtual Result OnUnaryExpr(UnaryExpr*) = 0;
+ virtual Result OnUnreachableExpr(UnreachableExpr*) = 0;
+ virtual Result BeginTryExpr(TryExpr*) = 0;
+ virtual Result EndTryExpr(TryExpr*) = 0;
+ virtual Result OnCatchExpr(TryExpr*, Catch*) = 0;
+ virtual Result OnThrowExpr(ThrowExpr*) = 0;
+ virtual Result OnRethrowExpr(RethrowExpr*) = 0;
};
class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
public:
- Result OnBinaryExpr(Expr*) override { return Result::Ok; }
- Result BeginBlockExpr(Expr*) override { return Result::Ok; }
- Result EndBlockExpr(Expr*) override { return Result::Ok; }
- Result OnBrExpr(Expr*) override { return Result::Ok; }
- Result OnBrIfExpr(Expr*) override { return Result::Ok; }
- Result OnBrTableExpr(Expr*) override { return Result::Ok; }
- Result OnCallExpr(Expr*) override { return Result::Ok; }
- Result OnCallIndirectExpr(Expr*) override { return Result::Ok; }
- Result OnCompareExpr(Expr*) override { return Result::Ok; }
- Result OnConstExpr(Expr*) override { return Result::Ok; }
- Result OnConvertExpr(Expr*) override { return Result::Ok; }
- Result OnCurrentMemoryExpr(Expr*) override { return Result::Ok; }
- Result OnDropExpr(Expr*) override { return Result::Ok; }
- Result OnGetGlobalExpr(Expr*) override { return Result::Ok; }
- Result OnGetLocalExpr(Expr*) override { return Result::Ok; }
- Result OnGrowMemoryExpr(Expr*) override { return Result::Ok; }
- Result BeginIfExpr(Expr*) override { return Result::Ok; }
- Result AfterIfTrueExpr(Expr*) override { return Result::Ok; }
- Result EndIfExpr(Expr*) override { return Result::Ok; }
- Result OnLoadExpr(Expr*) override { return Result::Ok; }
- Result BeginLoopExpr(Expr*) override { return Result::Ok; }
- Result EndLoopExpr(Expr*) override { return Result::Ok; }
- Result OnNopExpr(Expr*) override { return Result::Ok; }
- Result OnReturnExpr(Expr*) override { return Result::Ok; }
- Result OnSelectExpr(Expr*) override { return Result::Ok; }
- Result OnSetGlobalExpr(Expr*) override { return Result::Ok; }
- Result OnSetLocalExpr(Expr*) override { return Result::Ok; }
- Result OnStoreExpr(Expr*) override { return Result::Ok; }
- Result OnTeeLocalExpr(Expr*) override { return Result::Ok; }
- Result OnUnaryExpr(Expr*) override { return Result::Ok; }
- Result OnUnreachableExpr(Expr*) override { return Result::Ok; }
- Result BeginTryExpr(Expr*) override { return Result::Ok; }
- Result EndTryExpr(Expr*) override { return Result::Ok; }
- Result OnCatchExpr(Expr*, Catch*) override { return Result::Ok; }
- Result OnThrowExpr(Expr*) override { return Result::Ok; }
- Result OnRethrowExpr(Expr*) override { return Result::Ok; }
+ Result OnBinaryExpr(BinaryExpr*) override { return Result::Ok; }
+ Result BeginBlockExpr(BlockExpr*) override { return Result::Ok; }
+ Result EndBlockExpr(BlockExpr*) override { return Result::Ok; }
+ Result OnBrExpr(BrExpr*) override { return Result::Ok; }
+ Result OnBrIfExpr(BrIfExpr*) override { return Result::Ok; }
+ Result OnBrTableExpr(BrTableExpr*) override { return Result::Ok; }
+ Result OnCallExpr(CallExpr*) override { return Result::Ok; }
+ Result OnCallIndirectExpr(CallIndirectExpr*) override { return Result::Ok; }
+ Result OnCompareExpr(CompareExpr*) override { return Result::Ok; }
+ Result OnConstExpr(ConstExpr*) override { return Result::Ok; }
+ Result OnConvertExpr(ConvertExpr*) override { return Result::Ok; }
+ Result OnCurrentMemoryExpr(CurrentMemoryExpr*) override { return Result::Ok; }
+ Result OnDropExpr(DropExpr*) override { return Result::Ok; }
+ Result OnGetGlobalExpr(GetGlobalExpr*) override { return Result::Ok; }
+ Result OnGetLocalExpr(GetLocalExpr*) override { return Result::Ok; }
+ Result OnGrowMemoryExpr(GrowMemoryExpr*) override { return Result::Ok; }
+ Result BeginIfExpr(IfExpr*) override { return Result::Ok; }
+ Result AfterIfTrueExpr(IfExpr*) override { return Result::Ok; }
+ Result EndIfExpr(IfExpr*) override { return Result::Ok; }
+ Result OnLoadExpr(LoadExpr*) override { return Result::Ok; }
+ Result BeginLoopExpr(LoopExpr*) override { return Result::Ok; }
+ Result EndLoopExpr(LoopExpr*) override { return Result::Ok; }
+ Result OnNopExpr(NopExpr*) override { return Result::Ok; }
+ Result OnReturnExpr(ReturnExpr*) override { return Result::Ok; }
+ Result OnSelectExpr(SelectExpr*) override { return Result::Ok; }
+ Result OnSetGlobalExpr(SetGlobalExpr*) override { return Result::Ok; }
+ Result OnSetLocalExpr(SetLocalExpr*) override { return Result::Ok; }
+ Result OnStoreExpr(StoreExpr*) override { return Result::Ok; }
+ Result OnTeeLocalExpr(TeeLocalExpr*) override { return Result::Ok; }
+ Result OnUnaryExpr(UnaryExpr*) override { return Result::Ok; }
+ Result OnUnreachableExpr(UnreachableExpr*) override { return Result::Ok; }
+ Result BeginTryExpr(TryExpr*) override { return Result::Ok; }
+ Result EndTryExpr(TryExpr*) override { return Result::Ok; }
+ Result OnCatchExpr(TryExpr*, Catch*) override { return Result::Ok; }
+ Result OnThrowExpr(ThrowExpr*) override { return Result::Ok; }
+ Result OnRethrowExpr(RethrowExpr*) override { return Result::Ok; }
};
} // namespace wabt