diff options
Diffstat (limited to 'src/wasm-traversal.h')
-rw-r--r-- | src/wasm-traversal.h | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/src/wasm-traversal.h b/src/wasm-traversal.h index cd83aa1b6..b32babf74 100644 --- a/src/wasm-traversal.h +++ b/src/wasm-traversal.h @@ -88,6 +88,18 @@ template<typename SubType, typename ReturnType = void> struct Visitor { ReturnType visitTupleExtract(TupleExtract* curr) { return ReturnType(); } ReturnType visitI31New(I31New* curr) { return ReturnType(); } ReturnType visitI31Get(I31Get* curr) { return ReturnType(); } + ReturnType visitRefTest(RefTest* curr) { return ReturnType(); } + ReturnType visitRefCast(RefCast* curr) { return ReturnType(); } + ReturnType visitBrOnCast(BrOnCast* curr) { return ReturnType(); } + ReturnType visitRttCanon(RttCanon* curr) { return ReturnType(); } + ReturnType visitRttSub(RttSub* curr) { return ReturnType(); } + ReturnType visitStructNew(StructNew* curr) { return ReturnType(); } + ReturnType visitStructGet(StructGet* curr) { return ReturnType(); } + ReturnType visitStructSet(StructSet* curr) { return ReturnType(); } + ReturnType visitArrayNew(ArrayNew* curr) { return ReturnType(); } + ReturnType visitArrayGet(ArrayGet* curr) { return ReturnType(); } + ReturnType visitArraySet(ArraySet* curr) { return ReturnType(); } + ReturnType visitArrayLen(ArrayLen* curr) { return ReturnType(); } // Module-level visitors ReturnType visitExport(Export* curr) { return ReturnType(); } ReturnType visitGlobal(Global* curr) { return ReturnType(); } @@ -207,6 +219,30 @@ template<typename SubType, typename ReturnType = void> struct Visitor { DELEGATE(I31New); case Expression::Id::I31GetId: DELEGATE(I31Get); + case Expression::Id::RefTestId: + DELEGATE(RefTest); + case Expression::Id::RefCastId: + DELEGATE(RefCast); + case Expression::Id::BrOnCastId: + DELEGATE(BrOnCast); + case Expression::Id::RttCanonId: + DELEGATE(RttCanon); + case Expression::Id::RttSubId: + DELEGATE(RttSub); + case Expression::Id::StructNewId: + DELEGATE(StructNew); + case Expression::Id::StructGetId: + DELEGATE(StructGet); + case Expression::Id::StructSetId: + DELEGATE(StructSet); + case Expression::Id::ArrayNewId: + DELEGATE(ArrayNew); + case Expression::Id::ArrayGetId: + DELEGATE(ArrayGet); + case Expression::Id::ArraySetId: + DELEGATE(ArraySet); + case Expression::Id::ArrayLenId: + DELEGATE(ArrayLen); case Expression::Id::InvalidId: default: WASM_UNREACHABLE("unexpected expression type"); @@ -281,6 +317,18 @@ struct OverriddenVisitor { UNIMPLEMENTED(TupleExtract); UNIMPLEMENTED(I31New); UNIMPLEMENTED(I31Get); + UNIMPLEMENTED(RefTest); + UNIMPLEMENTED(RefCast); + UNIMPLEMENTED(BrOnCast); + UNIMPLEMENTED(RttCanon); + UNIMPLEMENTED(RttSub); + UNIMPLEMENTED(StructNew); + UNIMPLEMENTED(StructGet); + UNIMPLEMENTED(StructSet); + UNIMPLEMENTED(ArrayNew); + UNIMPLEMENTED(ArrayGet); + UNIMPLEMENTED(ArraySet); + UNIMPLEMENTED(ArrayLen); UNIMPLEMENTED(Export); UNIMPLEMENTED(Global); UNIMPLEMENTED(Function); @@ -401,6 +449,30 @@ struct OverriddenVisitor { DELEGATE(I31New); case Expression::Id::I31GetId: DELEGATE(I31Get); + case Expression::Id::RefTestId: + DELEGATE(RefTest); + case Expression::Id::RefCastId: + DELEGATE(RefCast); + case Expression::Id::BrOnCastId: + DELEGATE(BrOnCast); + case Expression::Id::RttCanonId: + DELEGATE(RttCanon); + case Expression::Id::RttSubId: + DELEGATE(RttSub); + case Expression::Id::StructNewId: + DELEGATE(StructNew); + case Expression::Id::StructGetId: + DELEGATE(StructGet); + case Expression::Id::StructSetId: + DELEGATE(StructSet); + case Expression::Id::ArrayNewId: + DELEGATE(ArrayNew); + case Expression::Id::ArrayGetId: + DELEGATE(ArrayGet); + case Expression::Id::ArraySetId: + DELEGATE(ArraySet); + case Expression::Id::ArrayLenId: + DELEGATE(ArrayLen); case Expression::Id::InvalidId: default: WASM_UNREACHABLE("unexpected expression type"); @@ -572,6 +644,42 @@ struct UnifiedExpressionVisitor : public Visitor<SubType, ReturnType> { ReturnType visitI31Get(I31Get* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitRefTest(RefTest* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitRefCast(RefCast* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitBrOnCast(BrOnCast* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitRttCanon(RttCanon* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitRttSub(RttSub* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitStructNew(StructNew* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitStructGet(StructGet* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitStructSet(StructSet* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitArrayNew(ArrayNew* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitArrayGet(ArrayGet* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitArraySet(ArraySet* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } + ReturnType visitArrayLen(ArrayLen* curr) { + return static_cast<SubType*>(this)->visitExpression(curr); + } }; // @@ -898,6 +1006,42 @@ struct Walker : public VisitorType { static void doVisitI31Get(SubType* self, Expression** currp) { self->visitI31Get((*currp)->cast<I31Get>()); } + static void doVisitRefTest(SubType* self, Expression** currp) { + self->visitRefTest((*currp)->cast<RefTest>()); + } + static void doVisitRefCast(SubType* self, Expression** currp) { + self->visitRefCast((*currp)->cast<RefCast>()); + } + static void doVisitBrOnCast(SubType* self, Expression** currp) { + self->visitBrOnCast((*currp)->cast<BrOnCast>()); + } + static void doVisitRttCanon(SubType* self, Expression** currp) { + self->visitRttCanon((*currp)->cast<RttCanon>()); + } + static void doVisitRttSub(SubType* self, Expression** currp) { + self->visitRttSub((*currp)->cast<RttSub>()); + } + static void doVisitStructNew(SubType* self, Expression** currp) { + self->visitStructNew((*currp)->cast<StructNew>()); + } + static void doVisitStructGet(SubType* self, Expression** currp) { + self->visitStructGet((*currp)->cast<StructGet>()); + } + static void doVisitStructSet(SubType* self, Expression** currp) { + self->visitStructSet((*currp)->cast<StructSet>()); + } + static void doVisitArrayNew(SubType* self, Expression** currp) { + self->visitArrayNew((*currp)->cast<ArrayNew>()); + } + static void doVisitArrayGet(SubType* self, Expression** currp) { + self->visitArrayGet((*currp)->cast<ArrayGet>()); + } + static void doVisitArraySet(SubType* self, Expression** currp) { + self->visitArraySet((*currp)->cast<ArraySet>()); + } + static void doVisitArrayLen(SubType* self, Expression** currp) { + self->visitArrayLen((*currp)->cast<ArrayLen>()); + } void setModule(Module* module) { currModule = module; } @@ -1209,6 +1353,54 @@ struct PostWalker : public Walker<SubType, VisitorType> { self->pushTask(SubType::scan, &curr->cast<I31Get>()->i31); break; } + case Expression::Id::RefTestId: + self->pushTask(SubType::doVisitRefTest, currp); + WASM_UNREACHABLE("TODO (gc): ref.test"); + break; + case Expression::Id::RefCastId: + self->pushTask(SubType::doVisitRefCast, currp); + WASM_UNREACHABLE("TODO (gc): ref.cast"); + break; + case Expression::Id::BrOnCastId: + self->pushTask(SubType::doVisitBrOnCast, currp); + WASM_UNREACHABLE("TODO (gc): br_on_cast"); + break; + case Expression::Id::RttCanonId: + self->pushTask(SubType::doVisitRttCanon, currp); + WASM_UNREACHABLE("TODO (gc): rtt.canon"); + break; + case Expression::Id::RttSubId: + self->pushTask(SubType::doVisitRttSub, currp); + WASM_UNREACHABLE("TODO (gc): rtt.sub"); + break; + case Expression::Id::StructNewId: + self->pushTask(SubType::doVisitStructNew, currp); + WASM_UNREACHABLE("TODO (gc): struct.new"); + break; + case Expression::Id::StructGetId: + self->pushTask(SubType::doVisitStructGet, currp); + WASM_UNREACHABLE("TODO (gc): struct.get"); + break; + case Expression::Id::StructSetId: + self->pushTask(SubType::doVisitStructSet, currp); + WASM_UNREACHABLE("TODO (gc): struct.set"); + break; + case Expression::Id::ArrayNewId: + self->pushTask(SubType::doVisitArrayNew, currp); + WASM_UNREACHABLE("TODO (gc): array.new"); + break; + case Expression::Id::ArrayGetId: + self->pushTask(SubType::doVisitArrayGet, currp); + WASM_UNREACHABLE("TODO (gc): array.get"); + break; + case Expression::Id::ArraySetId: + self->pushTask(SubType::doVisitArraySet, currp); + WASM_UNREACHABLE("TODO (gc): array.set"); + break; + case Expression::Id::ArrayLenId: + self->pushTask(SubType::doVisitArrayLen, currp); + WASM_UNREACHABLE("TODO (gc): array.len"); + break; case Expression::Id::NumExpressionIds: WASM_UNREACHABLE("unexpected expression type"); } |