Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Unified Diff: test/mjsunit/wasm/wasm-module-builder.js

Issue 2424623002: [wasm] Use a Managed<WasmModule> to hold metadata about modules. (Closed)
Patch Set: [wasm] Use a Managed<WasmModule> to hold metadata about modules. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/mjsunit/wasm/indirect-calls.js ('k') | test/unittests/wasm/module-decoder-unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/wasm/wasm-module-builder.js
diff --git a/test/mjsunit/wasm/wasm-module-builder.js b/test/mjsunit/wasm/wasm-module-builder.js
index 5c5f6e205b7723a30549488a50d89a148f18d781..e3311c1cb620f8d798b9a6a8120e0c189c295768 100644
--- a/test/mjsunit/wasm/wasm-module-builder.js
+++ b/test/mjsunit/wasm/wasm-module-builder.js
@@ -132,10 +132,11 @@ class WasmModuleBuilder {
this.exports = [];
this.globals = [];
this.functions = [];
- this.table = [];
+ this.function_table = [];
+ this.function_table_length = 0;
+ this.function_table_inits = [];
this.segments = [];
this.explicit = [];
- this.pad = null;
this.num_imported_funcs = 0;
this.num_imported_globals = 0;
return this;
@@ -151,11 +152,6 @@ class WasmModuleBuilder {
return this;
}
- addPadFunctionTable(size) {
- this.pad = size;
- return this;
- }
-
addExplicitSection(bytes) {
this.explicit.push(bytes);
return this;
@@ -220,8 +216,21 @@ class WasmModuleBuilder {
this.exports.push({name: name, kind: kExternalMemory, index: 0});
}
+ addFunctionTableInit(base, is_global, array) {
+ this.function_table_inits.push({base: base, is_global: is_global, array: array});
+ if (!is_global) {
+ var length = base + array.length;
+ if (length > this.function_table_length) this.function_table_length = length;
+ }
+ return this;
+ }
+
appendToTable(array) {
- this.table.push(...array);
+ return this.addFunctionTableInit(this.function_table.length, false, array);
+ }
+
+ setFunctionTableLength(length) {
+ this.function_table_length = length;
return this;
}
@@ -292,15 +301,15 @@ class WasmModuleBuilder {
});
}
- // Add table.
- if (wasm.table.length > 0) {
+ // Add function_table.
+ if (wasm.function_table_length > 0) {
if (debug) print("emitting table @ " + binary.length);
binary.emit_section(kTableSectionCode, section => {
section.emit_u8(1); // one table entry
section.emit_u8(kWasmAnyFunctionTypeForm);
section.emit_u8(1);
- section.emit_u32v(wasm.table.length);
- section.emit_u32v(wasm.table.length);
+ section.emit_u32v(wasm.function_table_length);
+ section.emit_u32v(wasm.function_table_length);
});
}
@@ -394,17 +403,25 @@ class WasmModuleBuilder {
}
// Add table elements.
- if (wasm.table.length > 0) {
+ if (wasm.function_table_inits.length > 0) {
if (debug) print("emitting table @ " + binary.length);
binary.emit_section(kElementSectionCode, section => {
- section.emit_u8(1);
+ var inits = wasm.function_table_inits;
+ section.emit_u32v(inits.length);
section.emit_u8(0); // table index
- section.emit_u8(kExprI32Const);
- section.emit_u8(0);
- section.emit_u8(kExprEnd);
- section.emit_u32v(wasm.table.length);
- for (let index of wasm.table) {
- section.emit_u32v(index);
+
+ for (let init of inits) {
+ if (init.is_global) {
+ section.emit_u8(kExprGetGlobal);
+ } else {
+ section.emit_u8(kExprI32Const);
+ }
+ section.emit_u32v(init.base);
+ section.emit_u8(kExprEnd);
+ section.emit_u32v(init.array.length);
+ for (let index of init.array) {
+ section.emit_u32v(index);
+ }
}
});
}
« no previous file with comments | « test/mjsunit/wasm/indirect-calls.js ('k') | test/unittests/wasm/module-decoder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698