summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/binaryen-c.cpp195
-rw-r--r--test/binaryen.js/kitchen-sink.js.txt16
-rw-r--r--test/example/c-api-kitchen-sink.txt16
3 files changed, 122 insertions, 105 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index 6248f8d91..88a3d033e 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -101,6 +101,78 @@ size_t noteExpression(BinaryenExpressionRef expression) {
return id;
}
+template<typename T>
+void printArg(T arg) {
+ std::cout << arg;
+}
+
+template<>
+void printArg(void* arg) {
+ std::cout << "expressions[" << expressions[arg] << "]";
+}
+
+struct StringLit {
+ const char* name;
+ StringLit(const char* name) : name(name) {};
+};
+
+template<>
+void printArg(StringLit arg) {
+ traceNameOrNULL(arg.name);
+}
+
+template<>
+void printArg(BinaryenType arg) {
+ if (arg == BinaryenTypeAuto()) {
+ std::cout << "BinaryenTypeAuto()";
+ } else {
+ std::cout << arg;
+ }
+}
+
+template<>
+void printArg(BinaryenLiteral arg) {
+ switch (arg.type) {
+ case Type::i32: std::cout << "BinaryenLiteralInt32(" << arg.i32 << ")"; break;
+ case Type::i64: std::cout << "BinaryenLiteralInt64(" << arg.i64 << ")"; break;
+ case Type::f32:
+ if (std::isnan(arg.f32)) {
+ std::cout << "BinaryenLiteralFloat32(NAN)"; break;
+ } else {
+ std::cout << "BinaryenLiteralFloat32(" << arg.f32 << ")"; break;
+ }
+ case Type::f64:
+ if (std::isnan(arg.f64)) {
+ std::cout << "BinaryenLiteralFloat64(NAN)"; break;
+ } else {
+ std::cout << "BinaryenLiteralFloat64(" << arg.f64 << ")"; break;
+ }
+ case Type::v128:
+ case Type::none:
+ case Type::unreachable: WASM_UNREACHABLE();
+ }
+}
+
+template<typename T>
+void traceArgs(T arg) {
+ printArg(arg);
+}
+
+template<typename T, typename S, typename ...Ts>
+void traceArgs(T arg, S next, Ts... rest) {
+ printArg(arg);
+ std::cout << ", ";
+ traceArgs(next, rest...);
+}
+
+template<typename ...Ts>
+void traceExpression(BinaryenExpressionRef expr, const char* constructor, Ts... args) {
+ auto id = noteExpression(expr);
+ std::cout << " expressions[" << id << "] = " << constructor << "(";
+ traceArgs("the_module", args...);
+ std::cout << ");\n";
+}
+
extern "C" {
//
@@ -421,14 +493,8 @@ BinaryenExpressionRef BinaryenBlock(BinaryenModuleRef module, const char* name,
std::cout << "expressions[" << expressions[children[i]] << "]";
}
if (numChildren == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS
- std::cout << " };\n";
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenBlock(the_module, ";
- traceNameOrNULL(name);
- std::cout << ", children, " << numChildren << ", ";
- if (type == BinaryenTypeAuto()) std::cout << "BinaryenTypeAuto()";
- else std::cout << type;
- std::cout << ");\n";
+ std::cout << " };\n ";
+ traceExpression(ret, "BinaryenBlock", StringLit(name), "children", numChildren, type);
std::cout << " }\n";
}
@@ -442,8 +508,7 @@ BinaryenExpressionRef BinaryenIf(BinaryenModuleRef module, BinaryenExpressionRef
ret->finalize();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenIf(the_module, expressions[" << expressions[condition] << "], expressions[" << expressions[ifTrue] << "], expressions[" << expressions[ifFalse] << "]);\n";
+ traceExpression(ret, "BinaryenIf", condition, ifTrue, ifFalse);
}
return static_cast<Expression*>(ret);
@@ -452,10 +517,7 @@ BinaryenExpressionRef BinaryenLoop(BinaryenModuleRef module, const char* name, B
auto* ret = Builder(*((Module*)module)).makeLoop(name ? Name(name) : Name(), (Expression*)body);
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenLoop(the_module, ";
- traceNameOrNULL(name);
- std::cout << ", expressions[" << expressions[body] << "]);\n";
+ traceExpression(ret, "BinaryenLoop", StringLit(name), body);
}
return static_cast<Expression*>(ret);
@@ -464,8 +526,7 @@ BinaryenExpressionRef BinaryenBreak(BinaryenModuleRef module, const char* name,
auto* ret = Builder(*((Module*)module)).makeBreak(name, (Expression*)value, (Expression*)condition);
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenBreak(the_module, \"" << name << "\", expressions[" << expressions[condition] << "], expressions[" << expressions[value] << "]);\n";
+ traceExpression(ret, "BinaryenBreak", StringLit(name), condition, value);
}
return static_cast<Expression*>(ret);
@@ -481,9 +542,8 @@ BinaryenExpressionRef BinaryenSwitch(BinaryenModuleRef module, const char** name
std::cout << "\"" << names[i] << "\"";
}
if (numNames == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS
- std::cout << " };\n";
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenSwitch(the_module, names, " << numNames << ", \"" << defaultName << "\", expressions[" << expressions[condition] << "], expressions[" << expressions[value] << "]);\n";
+ std::cout << " };\n ";
+ traceExpression(ret, "BinaryenSwitch", "names", numNames, StringLit(defaultName), condition, value);
std::cout << " }\n";
}
@@ -507,9 +567,8 @@ BinaryenExpressionRef BinaryenCall(BinaryenModuleRef module, const char* target,
std::cout << "expressions[" << expressions[operands[i]] << "]";
}
if (numOperands == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS
- std::cout << " };\n";
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenCall(the_module, \"" << target << "\", operands, " << numOperands << ", " << returnType << ");\n";
+ std::cout << " };\n ";
+ traceExpression(ret, "BinaryenCall", StringLit(target), "operands", numOperands, returnType);
std::cout << " }\n";
}
@@ -533,9 +592,8 @@ BinaryenExpressionRef BinaryenCallIndirect(BinaryenModuleRef module, BinaryenExp
std::cout << "expressions[" << expressions[operands[i]] << "]";
}
if (numOperands == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS
- std::cout << " };\n";
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenCallIndirect(the_module, expressions[" << expressions[target] << "], operands, " << numOperands << ", \"" << type << "\");\n";
+ std::cout << " };\n ";
+ traceExpression(ret, "BinaryenCallIndirect", target, "operands", numOperands, StringLit(type));
std::cout << " }\n";
}
@@ -552,8 +610,7 @@ BinaryenExpressionRef BinaryenGetLocal(BinaryenModuleRef module, BinaryenIndex i
auto* ret = ((Module*)module)->allocator.alloc<GetLocal>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenGetLocal(the_module, " << index << ", " << type << ");\n";
+ traceExpression(ret, "BinaryenGetLocal", index, type);
}
ret->index = index;
@@ -565,8 +622,7 @@ BinaryenExpressionRef BinaryenSetLocal(BinaryenModuleRef module, BinaryenIndex i
auto* ret = ((Module*)module)->allocator.alloc<SetLocal>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenSetLocal(the_module, " << index << ", expressions[" << expressions[value] << "]);\n";
+ traceExpression(ret, "BinaryenSetLocal", index, value);
}
ret->index = index;
@@ -579,8 +635,7 @@ BinaryenExpressionRef BinaryenTeeLocal(BinaryenModuleRef module, BinaryenIndex i
auto* ret = ((Module*)module)->allocator.alloc<SetLocal>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenTeeLocal(the_module, " << index << ", expressions[" << expressions[value] << "]);\n";
+ traceExpression(ret, "BinaryenTeeLocal", index, value);
}
ret->index = index;
@@ -593,8 +648,7 @@ BinaryenExpressionRef BinaryenGetGlobal(BinaryenModuleRef module, const char* na
auto* ret = ((Module*)module)->allocator.alloc<GetGlobal>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenGetGlobal(the_module, \"" << name << "\", " << type << ");\n";
+ traceExpression(ret, "BinaryenGetGlobal", StringLit(name), type);
}
ret->name = name;
@@ -606,8 +660,7 @@ BinaryenExpressionRef BinaryenSetGlobal(BinaryenModuleRef module, const char* na
auto* ret = ((Module*)module)->allocator.alloc<SetGlobal>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenSetGlobal(the_module, \"" << name << "\", expressions[" << expressions[value] << "]);\n";
+ traceExpression(ret, "BinaryenSetGlobal", StringLit(name), value);
}
ret->name = name;
@@ -619,8 +672,7 @@ BinaryenExpressionRef BinaryenLoad(BinaryenModuleRef module, uint32_t bytes, int
auto* ret = ((Module*)module)->allocator.alloc<Load>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenLoad(the_module, " << bytes << ", " << int(signed_) << ", " << offset << ", " << align << ", " << type << ", expressions[" << expressions[ptr] << "]);\n";
+ traceExpression(ret, "BinaryenLoad", bytes, int(signed_), offset, align, type, ptr);
}
ret->isAtomic = false;
ret->bytes = bytes;
@@ -636,8 +688,7 @@ BinaryenExpressionRef BinaryenStore(BinaryenModuleRef module, uint32_t bytes, ui
auto* ret = ((Module*)module)->allocator.alloc<Store>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenStore(the_module, " << bytes << ", " << offset << ", " << align << ", expressions[" << expressions[ptr] << "], expressions[" << expressions[value] << "], " << type << ");\n";
+ traceExpression(ret, "BinaryenStore", bytes, offset, align, ptr, value, type);
}
ret->isAtomic = false;
ret->bytes = bytes;
@@ -652,27 +703,7 @@ BinaryenExpressionRef BinaryenStore(BinaryenModuleRef module, uint32_t bytes, ui
BinaryenExpressionRef BinaryenConst(BinaryenModuleRef module, BinaryenLiteral value) {
auto* ret = Builder(*((Module*)module)).makeConst(fromBinaryenLiteral(value));
if (tracing) {
- auto id = noteExpression(ret);
- switch (value.type) {
- case Type::i32: std::cout << " expressions[" << id << "] = BinaryenConst(the_module, BinaryenLiteralInt32(" << value.i32 << "));\n"; break;
- case Type::i64: std::cout << " expressions[" << id << "] = BinaryenConst(the_module, BinaryenLiteralInt64(" << value.i64 << "));\n"; break;
- case Type::f32: {
- std::cout << " expressions[" << id << "] = BinaryenConst(the_module, BinaryenLiteralFloat32(";
- if (std::isnan(value.f32)) std::cout << "NAN";
- else std::cout << value.f32;
- std::cout << "));\n";
- break;
- }
- case Type::f64: {
- std::cout << " expressions[" << id << "] = BinaryenConst(the_module, BinaryenLiteralFloat64(";
- if (std::isnan(value.f64)) std::cout << "NAN";
- else std::cout << value.f64;
- std::cout << "));\n";
- break;
- }
- case Type::none:
- case Type::unreachable: WASM_UNREACHABLE();
- }
+ traceExpression(ret, "BinaryenConst", value);
}
return static_cast<Expression*>(ret);
}
@@ -680,8 +711,7 @@ BinaryenExpressionRef BinaryenUnary(BinaryenModuleRef module, BinaryenOp op, Bin
auto* ret = Builder(*((Module*)module)).makeUnary(UnaryOp(op), (Expression*)value);
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenUnary(the_module, " << op << ", expressions[" << expressions[value] << "]);\n";
+ traceExpression(ret, "BinaryenUnary", op, value);
}
return static_cast<Expression*>(ret);
@@ -690,8 +720,7 @@ BinaryenExpressionRef BinaryenBinary(BinaryenModuleRef module, BinaryenOp op, Bi
auto* ret = Builder(*((Module*)module)).makeBinary(BinaryOp(op), (Expression*)left, (Expression*)right);
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenBinary(the_module, " << op << ", expressions[" << expressions[left] << "], expressions[" << expressions[right] << "]);\n";
+ traceExpression(ret, "BinaryenBinary", op, left, right);
}
return static_cast<Expression*>(ret);
@@ -700,8 +729,7 @@ BinaryenExpressionRef BinaryenSelect(BinaryenModuleRef module, BinaryenExpressio
auto* ret = ((Module*)module)->allocator.alloc<Select>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenSelect(the_module, expressions[" << expressions[condition] << "], expressions[" << expressions[ifTrue] << "], expressions[" << expressions[ifFalse] << "]);\n";
+ traceExpression(ret, "BinaryenSelect", condition, ifTrue, ifFalse);
}
ret->condition = (Expression*)condition;
@@ -714,8 +742,7 @@ BinaryenExpressionRef BinaryenDrop(BinaryenModuleRef module, BinaryenExpressionR
auto* ret = ((Module*)module)->allocator.alloc<Drop>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenDrop(the_module, expressions[" << expressions[value] << "]);\n";
+ traceExpression(ret, "BinaryenDrop", value);
}
ret->value = (Expression*)value;
@@ -726,8 +753,7 @@ BinaryenExpressionRef BinaryenReturn(BinaryenModuleRef module, BinaryenExpressio
auto* ret = Builder(*((Module*)module)).makeReturn((Expression*)value);
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenReturn(the_module, expressions[" << expressions[value] << "]);\n";
+ traceExpression(ret, "BinaryenReturn", value);
}
return static_cast<Expression*>(ret);
@@ -743,9 +769,8 @@ BinaryenExpressionRef BinaryenHost(BinaryenModuleRef module, BinaryenOp op, cons
std::cout << "expressions[" << expressions[operands[i]] << "]";
}
if (numOperands == 0) std::cout << "0"; // ensure the array is not empty, otherwise a compiler error on VS
- std::cout << " };\n";
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenHost(the_module, " << op << ", \"" << name << "\", operands, " << numOperands << ");\n";
+ std::cout << " };\n ";
+ traceExpression(ret, "BinaryenHost", StringLit(name), "operands", numOperands);
std::cout << " }\n";
}
@@ -761,8 +786,7 @@ BinaryenExpressionRef BinaryenNop(BinaryenModuleRef module) {
auto* ret = ((Module*)module)->allocator.alloc<Nop>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenNop(the_module);\n";
+ traceExpression(ret, "BinaryenNop");
}
return static_cast<Expression*>(ret);
@@ -771,8 +795,7 @@ BinaryenExpressionRef BinaryenUnreachable(BinaryenModuleRef module) {
auto* ret = ((Module*)module)->allocator.alloc<Unreachable>();
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenUnreachable(the_module);\n";
+ traceExpression(ret, "BinaryenUnreachable");
}
return static_cast<Expression*>(ret);
@@ -781,8 +804,7 @@ BinaryenExpressionRef BinaryenAtomicLoad(BinaryenModuleRef module, uint32_t byte
auto* ret = Builder(*((Module*)module)).makeAtomicLoad(bytes, offset, (Expression*)ptr, Type(type));
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenAtomicLoad(the_module, " << bytes << ", " << offset << ", " << type << ", expressions[" << expressions[ptr] << "]);\n";
+ traceExpression(ret, "BinaryenAtomicLoad", bytes, offset, type, ptr);
}
return static_cast<Expression*>(ret);
@@ -791,8 +813,7 @@ BinaryenExpressionRef BinaryenAtomicStore(BinaryenModuleRef module, uint32_t byt
auto* ret = Builder(*((Module*)module)).makeAtomicStore(bytes, offset, (Expression*)ptr, (Expression*)value, Type(type));
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenAtomicStore(the_module, " << bytes << ", " << offset << ", expressions[" << expressions[ptr] << "], expressions[" << expressions[value] << "], " << type << ");\n";
+ traceExpression(ret, "BinaryenAtomicStore", bytes, offset, ptr, value, type);
}
return static_cast<Expression*>(ret);
@@ -801,8 +822,7 @@ BinaryenExpressionRef BinaryenAtomicRMW(BinaryenModuleRef module, BinaryenOp op,
auto* ret = Builder(*((Module*)module)).makeAtomicRMW(AtomicRMWOp(op), bytes, offset, (Expression*)ptr, (Expression*)value, Type(type));
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenAtomicRMW(the_module, " << op << ", " << bytes << ", " << offset << ", expressions[" << expressions[ptr] << "], expressions[" << expressions[value] << "], " << type << ");\n";
+ traceExpression(ret, "BinaryenAtomicRMW", op, bytes, offset, ptr, value, type);
}
return static_cast<Expression*>(ret);
@@ -811,8 +831,7 @@ BinaryenExpressionRef BinaryenAtomicCmpxchg(BinaryenModuleRef module, BinaryenIn
auto* ret = Builder(*((Module*)module)).makeAtomicCmpxchg(bytes, offset, (Expression*)ptr, (Expression*)expected, (Expression*)replacement, Type(type));
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenAtomicCmpxchg(the_module, " << bytes << ", " << offset << ", expressions[" << expressions[ptr] << "], expressions[" << expressions[expected] << "], expressions[" << expressions[replacement] << "], " << type << ");\n";
+ traceExpression(ret, "BinaryenAtomicCmpxchg", bytes, offset, ptr, expected, replacement, type);
}
return static_cast<Expression*>(ret);
@@ -821,8 +840,7 @@ BinaryenExpressionRef BinaryenAtomicWait(BinaryenModuleRef module, BinaryenExpre
auto* ret = Builder(*((Module*)module)).makeAtomicWait((Expression*)ptr, (Expression*)expected, (Expression*)timeout, Type(expectedType), 0);
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenAtomicWait(the_module, expressions[" << expressions[ptr] << "], expressions[" << expressions[expected] << "], expressions[" << expressions[timeout] << "], " << expectedType << ");\n";
+ traceExpression(ret, "BinaryenAtomicWait", ptr, expected, timeout, expectedType);
}
return static_cast<Expression*>(ret);
@@ -831,8 +849,7 @@ BinaryenExpressionRef BinaryenAtomicWake(BinaryenModuleRef module, BinaryenExpre
auto* ret = Builder(*((Module*)module)).makeAtomicWake((Expression*)ptr, (Expression*)wakeCount, 0);
if (tracing) {
- auto id = noteExpression(ret);
- std::cout << " expressions[" << id << "] = BinaryenAtomicWake(the_module, expressions[" << expressions[ptr] << "], expressions[" << expressions[wakeCount] << "]);\n";
+ traceExpression(ret, "BinaryenAtomicWake", ptr, wakeCount);
}
return static_cast<Expression*>(ret);
diff --git a/test/binaryen.js/kitchen-sink.js.txt b/test/binaryen.js/kitchen-sink.js.txt
index 4a320bccc..1bf43df02 100644
--- a/test/binaryen.js/kitchen-sink.js.txt
+++ b/test/binaryen.js/kitchen-sink.js.txt
@@ -1351,18 +1351,18 @@ int main() {
BinaryenExpressionRef children[] = { 0 };
expressions[207] = BinaryenBlock(the_module, NULL, children, 0, 0);
}
- expressions[208] = BinaryenIf(the_module, expressions[7], expressions[8], expressions[9]);
- expressions[209] = BinaryenIf(the_module, expressions[10], expressions[11], expressions[0]);
+ expressions[208] = BinaryenIf(the_module, expressions[7], expressions[8], expressions[9]);
+ expressions[209] = BinaryenIf(the_module, expressions[10], expressions[11], expressions[0]);
expressions[210] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
- expressions[211] = BinaryenLoop(the_module, "in", expressions[210]);
+ expressions[211] = BinaryenLoop(the_module, "in", expressions[210]);
expressions[212] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
- expressions[213] = BinaryenLoop(the_module, NULL, expressions[212]);
- expressions[214] = BinaryenBreak(the_module, "the-value", expressions[12], expressions[13]);
+ expressions[213] = BinaryenLoop(the_module, NULL, expressions[212]);
+ expressions[214] = BinaryenBreak(the_module, "the-value", expressions[12], expressions[13]);
expressions[215] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
- expressions[216] = BinaryenBreak(the_module, "the-nothing", expressions[215], expressions[0]);
+ expressions[216] = BinaryenBreak(the_module, "the-nothing", expressions[215], expressions[0]);
expressions[217] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
- expressions[218] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[217]);
- expressions[219] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]);
+ expressions[218] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[217]);
+ expressions[219] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]);
{
const char* names[] = { "the-value" };
expressions[220] = BinaryenSwitch(the_module, names, 1, "the-value", expressions[14], expressions[15]);
diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt
index 786cf5243..600efb4dd 100644
--- a/test/example/c-api-kitchen-sink.txt
+++ b/test/example/c-api-kitchen-sink.txt
@@ -1329,18 +1329,18 @@ int main() {
BinaryenExpressionRef children[] = { 0 };
expressions[217] = BinaryenBlock(the_module, NULL, children, 0, BinaryenTypeAuto());
}
- expressions[218] = BinaryenIf(the_module, expressions[17], expressions[18], expressions[19]);
- expressions[219] = BinaryenIf(the_module, expressions[20], expressions[21], expressions[0]);
+ expressions[218] = BinaryenIf(the_module, expressions[17], expressions[18], expressions[19]);
+ expressions[219] = BinaryenIf(the_module, expressions[20], expressions[21], expressions[0]);
expressions[220] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
- expressions[221] = BinaryenLoop(the_module, "in", expressions[220]);
+ expressions[221] = BinaryenLoop(the_module, "in", expressions[220]);
expressions[222] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
- expressions[223] = BinaryenLoop(the_module, NULL, expressions[222]);
- expressions[224] = BinaryenBreak(the_module, "the-value", expressions[22], expressions[23]);
+ expressions[223] = BinaryenLoop(the_module, NULL, expressions[222]);
+ expressions[224] = BinaryenBreak(the_module, "the-value", expressions[22], expressions[23]);
expressions[225] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
- expressions[226] = BinaryenBreak(the_module, "the-nothing", expressions[225], expressions[0]);
+ expressions[226] = BinaryenBreak(the_module, "the-nothing", expressions[225], expressions[0]);
expressions[227] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
- expressions[228] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[227]);
- expressions[229] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]);
+ expressions[228] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[227]);
+ expressions[229] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]);
{
const char* names[] = { "the-value" };
expressions[230] = BinaryenSwitch(the_module, names, 1, "the-value", expressions[24], expressions[25]);