Skip to content

Commit 59e2a63

Browse files
committed
Add table section support to lib/parse
Originally part of AssemblyScript#288
1 parent eeb8a8f commit 59e2a63

File tree

8 files changed

+881
-793
lines changed

8 files changed

+881
-793
lines changed

lib/parse/assembly/index.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
ExternalKind,
88
NameType,
99
MAX_PAGES,
10-
MAX_TABLES,
10+
MAX_ELEMS,
1111
Opcode
1212
} from "../src/common";
1313

@@ -199,7 +199,7 @@ export function parse(begin: usize, end: usize): void {
199199
let type = readVarint(7) & 0x7f;
200200
let flags = readVaruint(1);
201201
let initial = readVaruint(32);
202-
let maximum: u32 = flags & 1 ? readVaruint(32) : MAX_TABLES;
202+
let maximum = flags & 1 ? readVaruint(32) : <u32>MAX_ELEMS;
203203
opt.onTableImport(
204204
tbl_space_index++,
205205
type,
@@ -212,7 +212,7 @@ export function parse(begin: usize, end: usize): void {
212212
case ExternalKind.Memory: {
213213
let flags = readVaruint(1);
214214
let initial = readVaruint(32);
215-
let maximum: u32 = flags & 1 ? readVaruint(32) : MAX_PAGES;
215+
let maximum = flags & 1 ? readVaruint(32) : <u32>MAX_PAGES;
216216
opt.onMemoryImport(
217217
mem_space_index++,
218218
initial,
@@ -247,12 +247,29 @@ export function parse(begin: usize, end: usize): void {
247247
}
248248
break;
249249
}
250+
case SectionId.Table: {
251+
let count = readVaruint(32);
252+
for (let index: u32 = 0; index < count; ++index) {
253+
let type = readVaruint(7) & 0x7f;
254+
let flags = readVaruint(1);
255+
let initial = readVaruint(32);
256+
let maximum = flags & 1 ? readVaruint(32) : <u32>MAX_ELEMS;
257+
opt.onTable(
258+
tbl_space_index++,
259+
type,
260+
initial,
261+
maximum,
262+
flags
263+
);
264+
}
265+
break;
266+
}
250267
case SectionId.Memory: {
251268
let count = readVaruint(32);
252269
for (let index: u32 = 0; index < count; ++index) {
253270
let flags = readVaruint(1);
254271
let initial = readVaruint(32);
255-
let maximum: u32 = flags ? readVaruint(32) : MAX_PAGES;
272+
let maximum = flags & 1 ? readVaruint(32) : <u32>MAX_PAGES;
256273
opt.onMemory(
257274
mem_space_index++,
258275
initial,

lib/parse/assembly/options.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export declare function onMemoryImport(index: u32, initial: u32, maximum: u32, f
1010
export declare function onGlobalImport(index: u32, type: u32, mutability: u32): void;
1111
export declare function onMemory(index: u32, initial: u32, maximum: u32, flags: u32): void;
1212
export declare function onFunction(index: u32, typeIndex: u32): void;
13+
export declare function onTable(index: u32, type: u32, initial: u32, maximum: u32, flags: u32): void;
1314
export declare function onGlobal(index: u32, type: u32, mutability: u32): void;
1415
export declare function onExport(index: u32, kind: u32, kindIndex: u32, nameOffset: u32, nameLength: u32): void;
1516
export declare function onStart(index: u32): void;

0 commit comments

Comments
 (0)