diff options
Diffstat (limited to 'src/wasm-traversal.h')
-rw-r--r-- | src/wasm-traversal.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/wasm-traversal.h b/src/wasm-traversal.h index f1306721e..04ab5f04a 100644 --- a/src/wasm-traversal.h +++ b/src/wasm-traversal.h @@ -72,6 +72,8 @@ template<typename SubType, typename ReturnType = void> struct Visitor { ReturnType visitHost(Host* curr) { return ReturnType(); } ReturnType visitNop(Nop* curr) { return ReturnType(); } ReturnType visitUnreachable(Unreachable* curr) { return ReturnType(); } + ReturnType visitPush(Push* curr) { return ReturnType(); } + ReturnType visitPop(Pop* curr) { return ReturnType(); } // Module-level visitors ReturnType visitFunctionType(FunctionType* curr) { return ReturnType(); } ReturnType visitExport(Export* curr) { return ReturnType(); } @@ -160,6 +162,10 @@ template<typename SubType, typename ReturnType = void> struct Visitor { DELEGATE(Nop); case Expression::Id::UnreachableId: DELEGATE(Unreachable); + case Expression::Id::PushId: + DELEGATE(Push); + case Expression::Id::PopId: + DELEGATE(Pop); case Expression::Id::InvalidId: default: WASM_UNREACHABLE(); @@ -218,6 +224,8 @@ struct OverriddenVisitor { UNIMPLEMENTED(Host); UNIMPLEMENTED(Nop); UNIMPLEMENTED(Unreachable); + UNIMPLEMENTED(Push); + UNIMPLEMENTED(Pop); UNIMPLEMENTED(FunctionType); UNIMPLEMENTED(Export); UNIMPLEMENTED(Global); @@ -307,6 +315,10 @@ struct OverriddenVisitor { DELEGATE(Nop); case Expression::Id::UnreachableId: DELEGATE(Unreachable); + case Expression::Id::PushId: + DELEGATE(Push); + case Expression::Id::PopId: + DELEGATE(Pop); case Expression::Id::InvalidId: default: WASM_UNREACHABLE(); @@ -430,6 +442,12 @@ struct UnifiedExpressionVisitor : public Visitor<SubType, ReturnType> { ReturnType visitUnreachable(Unreachable* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitPush(Push* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitPop(Pop* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } }; // @@ -711,6 +729,12 @@ struct Walker : public VisitorType { static void doVisitUnreachable(SubType* self, Expression** currp) { self->visitUnreachable((*currp)->cast<Unreachable>()); } + static void doVisitPush(SubType* self, Expression** currp) { + self->visitPush((*currp)->cast<Push>()); + } + static void doVisitPop(SubType* self, Expression** currp) { + self->visitPop((*currp)->cast<Pop>()); + } void setModule(Module* module) { currModule = module; } @@ -945,6 +969,14 @@ struct PostWalker : public Walker<SubType, VisitorType> { self->pushTask(SubType::doVisitUnreachable, currp); break; } + case Expression::Id::PushId: { + self->pushTask(SubType::doVisitPush, currp); + break; + } + case Expression::Id::PopId: { + self->pushTask(SubType::doVisitPop, currp); + break; + } case Expression::Id::NumExpressionIds: WASM_UNREACHABLE(); } |