summaryrefslogtreecommitdiff
path: root/src/passes/Print.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/Print.cpp')
-rw-r--r--src/passes/Print.cpp62
1 files changed, 43 insertions, 19 deletions
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp
index 993eddb99..05a639158 100644
--- a/src/passes/Print.cpp
+++ b/src/passes/Print.cpp
@@ -2665,36 +2665,57 @@ struct PrintSExpression : public UnifiedExpressionVisitor<PrintSExpression> {
printTableHeader(curr);
o << maybeNewLine;
}
- for (auto& segment : curr->segments) {
- // Don't print empty segments
- if (segment.data.empty()) {
- continue;
- }
- doIndent(o, indent);
- o << '(';
- printMedium(o, "elem ");
+ ModuleUtils::iterTableSegments(
+ *currModule, curr->name, [&](ElementSegment* segment) {
+ printElementSegment(segment);
+ });
+ }
+ void visitElementSegment(ElementSegment* curr) {
+ if (curr->table.is()) {
+ return;
+ }
+ printElementSegment(curr);
+ }
+ void printElementSegment(ElementSegment* curr) {
+ // Don't print empty segments
+ if (curr->data.empty()) {
+ return;
+ }
+ doIndent(o, indent);
+ o << '(';
+ printMedium(o, "elem");
+ if (curr->hasExplicitName) {
+ o << ' ';
+ printName(curr->name, o);
+ }
+
+ if (curr->table.is()) {
// TODO(reference-types): check for old-style based on the complete spec
if (currModule->tables.size() > 1) {
// tableuse
- o << '(';
- printMedium(o, "table ");
- printName(curr->name, o);
- o << ") ";
+ o << " (table ";
+ printName(curr->table, o);
+ o << ")";
}
- visit(segment.offset);
+ o << ' ';
+ visit(curr->offset);
if (currModule->tables.size() > 1) {
- o << " func";
- }
-
- for (auto name : segment.data) {
o << ' ';
- printName(name, o);
+ TypeNamePrinter(o, currModule).print(HeapType::func);
}
- o << ')' << maybeNewLine;
+ } else {
+ o << ' ';
+ TypeNamePrinter(o, currModule).print(HeapType::func);
}
+
+ for (auto name : curr->data) {
+ o << ' ';
+ printName(name, o);
+ }
+ o << ')' << maybeNewLine;
}
void printMemoryHeader(Memory* curr) {
o << '(';
@@ -2833,6 +2854,9 @@ struct PrintSExpression : public UnifiedExpressionVisitor<PrintSExpression> {
*curr, [&](Memory* memory) { visitMemory(memory); });
ModuleUtils::iterDefinedTables(*curr,
[&](Table* table) { visitTable(table); });
+ for (auto& segment : curr->elementSegments) {
+ visitElementSegment(segment.get());
+ }
auto elemDeclareNames = TableUtils::getFunctionsNeedingElemDeclare(*curr);
if (!elemDeclareNames.empty()) {
doIndent(o, indent);