From 335a4ec656fa02db6f9e91160ce1dc6d1cd7a99a Mon Sep 17 00:00:00 2001 From: Nazeeh Abdul-Hadi <196516325+nazeeh111@users.noreply.github.com> Date: Sun, 11 Oct 2026 22:00:01 -0400 Subject: [PATCH] Fix getTableSegments argument and element-reference types --- index.d.ts | 2 +- package.json | 2 +- tests/sanity.js | 15 +++++++++++++++ tests/table-segments.ts | 17 +++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 tests/table-segments.ts diff --git a/index.d.ts b/index.d.ts index 43f366ee..e7ae7588 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1858,7 +1858,7 @@ declare namespace binaryen { addActiveElementSegment(table: string, name: string, funcNames: readonly string[], offset: ExpressionRef): ElementSegmentRef; addPassiveElementSegment(name: string, funcNames: readonly string[]): ElementSegmentRef; getElementSegment(name: string): ElementSegmentRef; - getTableSegments(table: string): string[]; + getTableSegments(table: TableRef): ElementSegmentRef[]; removeElementSegment(name: string): void; addTag(name: string, params: Type, results: Type): TagRef; getTag(name: string): TagRef; diff --git a/package.json b/package.json index 916004ca..fd4fc816 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ }, "scripts": { "readme": "doctoc README.md --github --title \"### Contents\"", - "check": "tsc index.d.ts --noEmit --strict --noImplicitAny --strictNullChecks --listFiles --diagnostics", + "check": "tsc index.d.ts tests/table-segments.ts --noEmit --strict --noImplicitAny --strictNullChecks --listFiles --diagnostics", "test": "npm run check && node tests/sanity && node tests/example", "bundle": "node scripts/bundle.js" }, diff --git a/tests/sanity.js b/tests/sanity.js index 3796a7fa..0ccc1bd9 100644 --- a/tests/sanity.js +++ b/tests/sanity.js @@ -66,3 +66,18 @@ assert(typeof js === "string" && js.length); console.log("wrapping an existing module"); var wrapped = binaryen.wrapModule(mod.ptr); assert(wrapped.getFunction("main")); + +console.log("getting element references for a table"); +var tables = new binaryen.Module(); +tables.addFunction("answer", binaryen.none, binaryen.i32, [], tables.i32.const(42)); +var dispatch = tables.addTable("dispatch", 1, 1); +tables.addTable("other", 1, 1); +tables.addActiveElementSegment("dispatch", "matched", [ "answer" ], tables.i32.const(0)); +tables.addActiveElementSegment("other", "unrelated", [ "answer" ], tables.i32.const(0)); +var segments = tables.getTableSegments(dispatch); +assert.deepStrictEqual(segments, [ tables.getElementSegment("matched") ]); +var segmentInfo = binaryen.getElementSegmentInfo(segments[0]); +assert.strictEqual(segmentInfo.name, "matched"); +assert.strictEqual(segmentInfo.table, "dispatch"); +assert.deepStrictEqual(segmentInfo.data, [ "answer" ]); +tables.dispose(); diff --git a/tests/table-segments.ts b/tests/table-segments.ts new file mode 100644 index 00000000..022b8dbe --- /dev/null +++ b/tests/table-segments.ts @@ -0,0 +1,17 @@ +import binaryen from "../index.js"; + +const module = new binaryen.Module(); +const table = module.addTable("dispatch", 1, 1); +const segments: binaryen.ElementSegmentRef[] = module.getTableSegments(table); +const info = binaryen.getElementSegmentInfo(segments[0]); +const segmentName: string = info.name; + +// A table name is not a table reference accepted by the runtime. +// @ts-expect-error +module.getTableSegments("dispatch"); + +// Element references are not names accepted by getElementSegment. +// @ts-expect-error +const names: string[] = segments; + +module.dispose();