Skip to content

Commit e9affb4

Browse files
authored
[binary-reader] Re-use ReadExternalKind for import as well as exports. NFC (#2684)
Another refactor to prepare for compact imports. I don't feel strongly about `malformed import kind` vs `invalid import external kind` but we should probably be consistent between imports and exports.
1 parent 42a0e40 commit e9affb4

File tree

8 files changed

+41
-37
lines changed

8 files changed

+41
-37
lines changed

src/binary-reader.cc

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ class BinaryReader {
117117
[[nodiscard]] Result ReadType(Type* out_value, const char* desc);
118118
[[nodiscard]] Result ReadRefType(Type* out_value, const char* desc);
119119
[[nodiscard]] Result ReadExternalKind(ExternalKind* out_value,
120-
const char* desc);
120+
const char* desc,
121+
const char* type);
121122
[[nodiscard]] Result ReadStr(std::string_view* out_str, const char* desc);
122123
[[nodiscard]] Result ReadBytes(const void** out_data,
123124
Address* out_data_size,
@@ -398,10 +399,11 @@ Result BinaryReader::ReadRefType(Type* out_value, const char* desc) {
398399
}
399400

400401
Result BinaryReader::ReadExternalKind(ExternalKind* out_value,
401-
const char* desc) {
402+
const char* desc,
403+
const char* type) {
402404
uint8_t value = 0;
403405
CHECK_RESULT(ReadU8(&value, desc));
404-
ERROR_UNLESS(value < kExternalKindCount, "invalid export external kind: %d",
406+
ERROR_UNLESS(value < kExternalKindCount, "invalid %s external kind: %d", type,
405407
value);
406408
*out_value = static_cast<ExternalKind>(value);
407409
return Result::Ok;
@@ -2696,13 +2698,10 @@ Result BinaryReader::ReadImportSection(Offset section_size) {
26962698
std::string_view field_name;
26972699
CHECK_RESULT(ReadStr(&field_name, "import field name"));
26982700

2699-
uint8_t kind_u8;
2700-
CHECK_RESULT(ReadU8(&kind_u8, "import kind"));
2701-
ERROR_UNLESS(kind_u8 < kExternalKindCount, "malformed import kind: %d",
2702-
kind_u8);
2703-
ExternalKind kind = static_cast<ExternalKind>(kind_u8);
2704-
2701+
ExternalKind kind;
2702+
CHECK_RESULT(ReadExternalKind(&kind, "import kind", "import"));
27052703
CALLBACK(OnImport, i, kind, module_name, field_name);
2704+
27062705
switch (kind) {
27072706
case ExternalKind::Func: {
27082707
Index sig_index;
@@ -2872,7 +2871,7 @@ Result BinaryReader::ReadExportSection(Offset section_size) {
28722871
CHECK_RESULT(ReadStr(&name, "export item name"));
28732872

28742873
ExternalKind kind;
2875-
CHECK_RESULT(ReadExternalKind(&kind, "export kind"));
2874+
CHECK_RESULT(ReadExternalKind(&kind, "export kind", "export"));
28762875

28772876
Index item_index;
28782877
CHECK_RESULT(ReadIndex(&item_index, "export item index"));
@@ -2930,7 +2929,7 @@ Result BinaryReader::ReadElemSection(Offset section_size) {
29302929
CHECK_RESULT(ReadRefType(&elem_type, "table elem type"));
29312930
} else {
29322931
ExternalKind kind;
2933-
CHECK_RESULT(ReadExternalKind(&kind, "export kind"));
2932+
CHECK_RESULT(ReadExternalKind(&kind, "export kind", "export"));
29342933
ERROR_UNLESS(kind == ExternalKind::Func,
29352934
"segment elem type must be func (%s)",
29362935
elem_type.GetName().c_str());

test/binary/bad-import-kind.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ magic
33
version
44
section(IMPORT) { count[1] str("module") str("func") dummy[5] }
55
(;; STDERR ;;;
6-
0000018: error: malformed import kind: 5
7-
0000018: error: malformed import kind: 5
6+
0000018: error: invalid import external kind: 5
7+
0000018: error: invalid import external kind: 5
88
;;; STDERR ;;)

test/parse/branch-hints.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,11 @@
5353
)
5454

5555
(;; STDOUT ;;;
56+
5657
branch-hints.wasm: file format wasm 0x1
58+
5759
Section Details:
60+
5861
Custom:
5962
- name: "metadata.code.branch_hint"
6063
- func[0]:
@@ -75,7 +78,9 @@ Custom:
7578
- 0000000: 01 .
7679
- meta[7]:
7780
- 0000000: 00 .
81+
7882
Code Disassembly:
83+
7984
000057 func[0]:
8085
000058: 04 7f | local[0..3] type=i32
8186
00005a: 41 00 | i32.const 0

test/spec/binary.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,13 @@ out/test/spec/binary.wast:680: assert_malformed passed:
134134
out/test/spec/binary.wast:690: assert_malformed passed:
135135
000000e: error: invalid import tag kind: exceptions not allowed
136136
out/test/spec/binary.wast:701: assert_malformed passed:
137-
000000e: error: malformed import kind: 5
137+
000000e: error: invalid import external kind: 5
138138
out/test/spec/binary.wast:711: assert_malformed passed:
139-
000000e: error: malformed import kind: 5
139+
000000e: error: invalid import external kind: 5
140140
out/test/spec/binary.wast:722: assert_malformed passed:
141-
000000e: error: malformed import kind: 128
141+
000000e: error: invalid import external kind: 128
142142
out/test/spec/binary.wast:732: assert_malformed passed:
143-
000000e: error: malformed import kind: 128
143+
000000e: error: invalid import external kind: 128
144144
out/test/spec/binary.wast:745: assert_malformed passed:
145145
0000027: error: unable to read u32 leb128: string length
146146
out/test/spec/binary.wast:764: assert_malformed passed:

test/spec/exception-handling/binary.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,17 +131,17 @@ out/test/spec/exception-handling/binary.wast:650: assert_malformed passed:
131131
out/test/spec/exception-handling/binary.wast:661: assert_malformed passed:
132132
000000e: error: unfinished section (expected end: 0x11)
133133
out/test/spec/exception-handling/binary.wast:680: assert_malformed passed:
134-
000000e: error: malformed import kind: 5
134+
000000e: error: invalid import external kind: 5
135135
out/test/spec/exception-handling/binary.wast:690: assert_malformed passed:
136-
000000e: error: malformed import kind: 5
136+
000000e: error: invalid import external kind: 5
137137
out/test/spec/exception-handling/binary.wast:701: assert_malformed passed:
138-
000000e: error: malformed import kind: 5
138+
000000e: error: invalid import external kind: 5
139139
out/test/spec/exception-handling/binary.wast:711: assert_malformed passed:
140-
000000e: error: malformed import kind: 5
140+
000000e: error: invalid import external kind: 5
141141
out/test/spec/exception-handling/binary.wast:722: assert_malformed passed:
142-
000000e: error: malformed import kind: 128
142+
000000e: error: invalid import external kind: 128
143143
out/test/spec/exception-handling/binary.wast:732: assert_malformed passed:
144-
000000e: error: malformed import kind: 128
144+
000000e: error: invalid import external kind: 128
145145
out/test/spec/exception-handling/binary.wast:745: assert_malformed passed:
146146
0000027: error: unable to read u32 leb128: string length
147147
out/test/spec/exception-handling/binary.wast:764: assert_malformed passed:

test/spec/function-references/binary.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,13 @@ out/test/spec/function-references/binary.wast:680: assert_malformed passed:
135135
out/test/spec/function-references/binary.wast:690: assert_malformed passed:
136136
000000e: error: invalid import tag kind: exceptions not allowed
137137
out/test/spec/function-references/binary.wast:701: assert_malformed passed:
138-
000000e: error: malformed import kind: 5
138+
000000e: error: invalid import external kind: 5
139139
out/test/spec/function-references/binary.wast:711: assert_malformed passed:
140-
000000e: error: malformed import kind: 5
140+
000000e: error: invalid import external kind: 5
141141
out/test/spec/function-references/binary.wast:722: assert_malformed passed:
142-
000000e: error: malformed import kind: 128
142+
000000e: error: invalid import external kind: 128
143143
out/test/spec/function-references/binary.wast:732: assert_malformed passed:
144-
000000e: error: malformed import kind: 128
144+
000000e: error: invalid import external kind: 128
145145
out/test/spec/function-references/binary.wast:745: assert_malformed passed:
146146
0000027: error: unable to read u32 leb128: string length
147147
out/test/spec/function-references/binary.wast:764: assert_malformed passed:

test/spec/memory64/binary.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,17 +111,17 @@ out/test/spec/memory64/binary.wast:459: assert_malformed passed:
111111
out/test/spec/memory64/binary.wast:470: assert_malformed passed:
112112
000000e: error: unfinished section (expected end: 0x11)
113113
out/test/spec/memory64/binary.wast:489: assert_malformed passed:
114-
000000e: error: malformed import kind: 5
114+
000000e: error: invalid import external kind: 5
115115
out/test/spec/memory64/binary.wast:499: assert_malformed passed:
116-
000000e: error: malformed import kind: 5
116+
000000e: error: invalid import external kind: 5
117117
out/test/spec/memory64/binary.wast:510: assert_malformed passed:
118-
000000e: error: malformed import kind: 5
118+
000000e: error: invalid import external kind: 5
119119
out/test/spec/memory64/binary.wast:520: assert_malformed passed:
120-
000000e: error: malformed import kind: 5
120+
000000e: error: invalid import external kind: 5
121121
out/test/spec/memory64/binary.wast:531: assert_malformed passed:
122-
000000e: error: malformed import kind: 128
122+
000000e: error: invalid import external kind: 128
123123
out/test/spec/memory64/binary.wast:541: assert_malformed passed:
124-
000000e: error: malformed import kind: 128
124+
000000e: error: invalid import external kind: 128
125125
out/test/spec/memory64/binary.wast:554: assert_malformed passed:
126126
0000027: error: unable to read u32 leb128: string length
127127
out/test/spec/memory64/binary.wast:573: assert_malformed passed:

test/spec/multi-memory/binary.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,13 @@ out/test/spec/multi-memory/binary.wast:489: assert_malformed passed:
115115
out/test/spec/multi-memory/binary.wast:499: assert_malformed passed:
116116
000000e: error: invalid import tag kind: exceptions not allowed
117117
out/test/spec/multi-memory/binary.wast:510: assert_malformed passed:
118-
000000e: error: malformed import kind: 5
118+
000000e: error: invalid import external kind: 5
119119
out/test/spec/multi-memory/binary.wast:520: assert_malformed passed:
120-
000000e: error: malformed import kind: 5
120+
000000e: error: invalid import external kind: 5
121121
out/test/spec/multi-memory/binary.wast:531: assert_malformed passed:
122-
000000e: error: malformed import kind: 128
122+
000000e: error: invalid import external kind: 128
123123
out/test/spec/multi-memory/binary.wast:541: assert_malformed passed:
124-
000000e: error: malformed import kind: 128
124+
000000e: error: invalid import external kind: 128
125125
out/test/spec/multi-memory/binary.wast:554: assert_malformed passed:
126126
0000027: error: unable to read u32 leb128: string length
127127
out/test/spec/multi-memory/binary.wast:573: assert_malformed passed:

0 commit comments

Comments
 (0)