diff options
Diffstat (limited to 'src/passes/Print.cpp')
-rw-r--r-- | src/passes/Print.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp index 9dbf3cc1f..e1ed788c4 100644 --- a/src/passes/Print.cpp +++ b/src/passes/Print.cpp @@ -57,7 +57,8 @@ static Name printableLocal(Index index, Function* func) { // Prints the internal contents of an expression: everything but // the children. -struct PrintExpressionContents : public Visitor<PrintExpressionContents> { +struct PrintExpressionContents + : public OverriddenVisitor<PrintExpressionContents> { Function* currFunction = nullptr; std::ostream& o; @@ -1150,11 +1151,17 @@ struct PrintExpressionContents : public Visitor<PrintExpressionContents> { } void visitNop(Nop* curr) { printMinor(o, "nop"); } void visitUnreachable(Unreachable* curr) { printMinor(o, "unreachable"); } + void visitPush(Push* curr) { prepareColor(o) << "push"; } + void visitPop(Pop* curr) { + prepareColor(o) << printType(curr->type); + o << ".pop"; + restoreNormalColor(o); + } }; // Prints an expression in s-expr format, including both the // internal contents and the nested children. -struct PrintSExpression : public Visitor<PrintSExpression> { +struct PrintSExpression : public OverriddenVisitor<PrintSExpression> { std::ostream& o; unsigned indent = 0; @@ -1205,7 +1212,7 @@ struct PrintSExpression : public Visitor<PrintSExpression> { void visit(Expression* curr) { printDebugLocation(curr); - Visitor<PrintSExpression>::visit(curr); + OverriddenVisitor<PrintSExpression>::visit(curr); } void setMinify(bool minify_) { @@ -1621,6 +1628,18 @@ struct PrintSExpression : public Visitor<PrintSExpression> { PrintExpressionContents(currFunction, o).visit(curr); o << ')'; } + void visitPush(Push* curr) { + o << '('; + PrintExpressionContents(currFunction, o).visit(curr); + incIndent(); + printFullLine(curr->value); + decIndent(); + } + void visitPop(Pop* curr) { + o << '('; + PrintExpressionContents(currFunction, o).visit(curr); + o << ')'; + } // Module-level visitors void visitFunctionType(FunctionType* curr, Name* internalName = nullptr) { o << "(func"; |