diff options
author | Ben Smith <binji@chromium.org> | 2016-04-25 07:33:49 -0700 |
---|---|---|
committer | Ben Smith <binji@chromium.org> | 2016-04-28 23:45:51 -0700 |
commit | ec184a350f52f96ea11130822967d03a9b16c68a (patch) | |
tree | b76ff67fc32066ef330dd897a50ef4875fe10a29 /src/wasm-binary-reader.c | |
parent | 8ff085d37bb107cabe7e9305553f7c3179e4ded8 (diff) | |
download | wabt-ec184a350f52f96ea11130822967d03a9b16c68a.tar.gz wabt-ec184a350f52f96ea11130822967d03a9b16c68a.tar.bz2 wabt-ec184a350f52f96ea11130822967d03a9b16c68a.zip |
use new "type" section format
Diffstat (limited to 'src/wasm-binary-reader.c')
-rw-r--r-- | src/wasm-binary-reader.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/wasm-binary-reader.c b/src/wasm-binary-reader.c index 160eeb1d..ef82e252 100644 --- a/src/wasm-binary-reader.c +++ b/src/wasm-binary-reader.c @@ -406,31 +406,43 @@ WasmResult wasm_read_binary(WasmAllocator* allocator, if (skip_until_section(&ctx, WASM_SECTION_INDEX_TYPE)) { CALLBACK0(&ctx, begin_signature_section); uint32_t i; - in_u32_leb128(&ctx, &num_signatures, "signature count"); + in_u32_leb128(&ctx, &num_signatures, "type count"); CALLBACK(&ctx, on_signature_count, num_signatures); for (i = 0; i < num_signatures; ++i) { + uint8_t form; + in_u8(&ctx, &form, "type form"); + RAISE_ERROR_UNLESS(&ctx, form == WASM_BINARY_TYPE_FORM_FUNCTION, + "unexpected type form"); + uint32_t num_params; - in_u32_leb128(&ctx, &num_params, "signature param count"); + in_u32_leb128(&ctx, &num_params, "function param count"); if (num_params > ctx.param_types.capacity) { CHECK_ALLOC( &ctx, wasm_reserve_types(allocator, &ctx.param_types, num_params)); } - uint8_t result_type; - in_u8(&ctx, &result_type, "signature result type"); - RAISE_ERROR_UNLESS(&ctx, is_valid_type(result_type), - "expected valid result type"); uint32_t j; for (j = 0; j < num_params; ++j) { uint8_t param_type; - in_u8(&ctx, ¶m_type, "signature param type"); + in_u8(&ctx, ¶m_type, "function param type"); RAISE_ERROR_UNLESS(&ctx, is_non_void_type(param_type), "expected valid param type"); ctx.param_types.data[j] = param_type; } + uint32_t num_results; + in_u32_leb128(&ctx, &num_results, "function result count"); + RAISE_ERROR_UNLESS(&ctx, num_results <= 1, "result count must be 0 or 1"); + + uint8_t result_type = WASM_TYPE_VOID; + if (num_results) { + in_u8(&ctx, &result_type, "function result type"); + RAISE_ERROR_UNLESS(&ctx, is_valid_type(result_type), + "expected valid result type"); + } + CALLBACK(&ctx, on_signature, i, (WasmType)result_type, num_params, ctx.param_types.data); } |