summaryrefslogtreecommitdiff
path: root/src/wasm-binary-writer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-binary-writer.c')
-rw-r--r--src/wasm-binary-writer.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/wasm-binary-writer.c b/src/wasm-binary-writer.c
index ff14082a..4606e7ed 100644
--- a/src/wasm-binary-writer.c
+++ b/src/wasm-binary-writer.c
@@ -472,6 +472,11 @@ static void write_expr_list(WasmContext* ctx,
const WasmFunc* func,
const WasmExprPtrVector* exprs);
+static void write_expr_or_nop(WasmContext* ctx,
+ const WasmModule* module,
+ const WasmFunc* func,
+ const WasmExpr* expr);
+
static void write_expr(WasmContext* ctx,
const WasmModule* module,
const WasmFunc* func,
@@ -494,10 +499,7 @@ static void write_expr(WasmContext* ctx,
case WASM_EXPR_TYPE_BR: {
WasmLabelNode* node = find_label_by_var(ctx->top_label, &expr->br.var);
assert(node);
- if (expr->br.expr)
- write_expr(ctx, module, func, expr->br.expr);
- else
- write_opcode(&ctx->stream, WASM_OPCODE_NOP);
+ write_expr_or_nop(ctx, module, func, expr->br.expr);
write_opcode(&ctx->stream, WASM_OPCODE_BR);
write_u32_leb128(&ctx->stream, ctx->max_depth - node->depth - 1,
"break depth");
@@ -506,10 +508,7 @@ static void write_expr(WasmContext* ctx,
case WASM_EXPR_TYPE_BR_IF: {
WasmLabelNode* node = find_label_by_var(ctx->top_label, &expr->br_if.var);
assert(node);
- if (expr->br_if.expr)
- write_expr(ctx, module, func, expr->br_if.expr);
- else
- write_opcode(&ctx->stream, WASM_OPCODE_NOP);
+ write_expr_or_nop(ctx, module, func, expr->br_if.expr);
write_expr(ctx, module, func, expr->br_if.cond);
write_opcode(&ctx->stream, WASM_OPCODE_BR_IF);
write_u32_leb128(&ctx->stream, ctx->max_depth - node->depth - 1,
@@ -680,7 +679,8 @@ static void write_expr(WasmContext* ctx,
break;
}
case WASM_EXPR_TYPE_BR_TABLE: {
- write_expr(ctx, module, func, expr->br_table.expr);
+ write_expr_or_nop(ctx, module, func, expr->br_table.expr);
+ write_expr(ctx, module, func, expr->br_table.key);
write_opcode(&ctx->stream, WASM_OPCODE_BR_TABLE);
write_u32_leb128(&ctx->stream, expr->br_table.targets.size,
"num targets");
@@ -716,6 +716,16 @@ static void write_expr_list(WasmContext* ctx,
write_expr(ctx, module, func, exprs->data[i]);
}
+static void write_expr_or_nop(WasmContext* ctx,
+ const WasmModule* module,
+ const WasmFunc* func,
+ const WasmExpr* expr) {
+ if (expr)
+ write_expr(ctx, module, func, expr);
+ else
+ write_opcode(&ctx->stream, WASM_OPCODE_NOP);
+}
+
static void write_func_locals(WasmContext* ctx,
const WasmModule* module,
const WasmFunc* func,