summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/binary-reader-objdump.cc7
-rw-r--r--src/binary-reader.cc8
-rw-r--r--src/binary-reader.h1
3 files changed, 13 insertions, 3 deletions
diff --git a/src/binary-reader-objdump.cc b/src/binary-reader-objdump.cc
index 5fd401c9..fa59b2b9 100644
--- a/src/binary-reader-objdump.cc
+++ b/src/binary-reader-objdump.cc
@@ -319,6 +319,12 @@ Result on_br_table_expr(BinaryReaderContext* ctx,
return Result::Ok;
}
+static Result on_end_func(void* user_data) {
+ Context* context = static_cast<Context*>(user_data);
+ log_opcode(context, nullptr, 0, nullptr);
+ return Result::Ok;
+}
+
static Result on_end_expr(void* user_data) {
Context* context = static_cast<Context*>(user_data);
context->indent_level--;
@@ -759,6 +765,7 @@ Result read_binary_objdump(const uint8_t* data,
reader.on_opcode_f64 = on_opcode_f64;
reader.on_opcode_block_sig = on_opcode_block_sig;
reader.on_end_expr = on_end_expr;
+ reader.on_end_func = on_end_func;
reader.on_br_table_expr = on_br_table_expr;
}
diff --git a/src/binary-reader.cc b/src/binary-reader.cc
index 1c30fae7..27c54157 100644
--- a/src/binary-reader.cc
+++ b/src/binary-reader.cc
@@ -1161,7 +1161,7 @@ static void read_global_header(Context* ctx,
uint8_t mutable_;
in_type(ctx, &global_type, "global type");
RAISE_ERROR_UNLESS(is_concrete_type(global_type),
- "expected valid global type");
+ "invalid global type: %#x", static_cast<int>(global_type));
in_u8(ctx, &mutable_, "global mutability");
RAISE_ERROR_UNLESS(mutable_ <= 1, "global mutability must be 0 or 1");
@@ -1281,10 +1281,12 @@ static void read_function_body(Context* ctx, uint32_t end_offset) {
break;
case Opcode::End:
- if (ctx->offset == end_offset)
+ if (ctx->offset == end_offset) {
seen_end_opcode = true;
- else
+ CALLBACK0(on_end_func);
+ } else {
CALLBACK0(on_end_expr);
+ }
break;
case Opcode::I32Const: {
diff --git a/src/binary-reader.h b/src/binary-reader.h
index 01067b65..df7e8071 100644
--- a/src/binary-reader.h
+++ b/src/binary-reader.h
@@ -203,6 +203,7 @@ struct BinaryReader {
Result (*on_drop_expr)(void* user_data);
Result (*on_else_expr)(void* user_data);
Result (*on_end_expr)(void* user_data);
+ Result (*on_end_func)(void* user_data);
Result (*on_f32_const_expr)(uint32_t value_bits, void* user_data);
Result (*on_f64_const_expr)(uint64_t value_bits, void* user_data);
Result (*on_get_global_expr)(uint32_t global_index, void* user_data);