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

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

Issue 1783593002: [wasm] Encode function signatures, bodies, and names as separate sections. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Added unittests Created 4 years, 9 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/wasm-constants.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 86727e787854d10b1ee07e3dbdde8d8173efd24e..efbcfd8b2483c2932df9fbcfceb15e8735973c50 100644
--- a/test/mjsunit/wasm/wasm-module-builder.js
+++ b/test/mjsunit/wasm/wasm-module-builder.js
@@ -125,6 +125,12 @@ function emit_varint(bytes, val) {
}
}
+function emit_bytes(bytes, data) {
+ for (var i = 0; i < data.length; i++) {
+ bytes.push(data[i] & 0xff);
+ }
+}
+
WasmModuleBuilder.prototype.toArray = function(debug) {
// Add header bytes
var bytes = [];
@@ -170,26 +176,26 @@ WasmModuleBuilder.prototype.toArray = function(debug) {
var names = false;
var exports = 0;
if (this.functions.length > 0) {
- if (debug) print("emitting functions @ " + bytes.length);
- emit_u8(bytes, kDeclFunctions);
+ var has_names = false;
+
+ // emit function signatures
+ if (debug) print("emitting function sigs @ " + bytes.length);
+ emit_u8(bytes, kDeclFunctionSignatures);
emit_varint(bytes, this.functions.length);
- var index = 0;
for (func of this.functions) {
- var flags = 0;
- var hasName = func.name != undefined && func.name.length > 0;
- names = names || hasName;
- if (hasName) flags |= kDeclFunctionName;
- exports += func.exports.length;
-
- emit_u8(bytes, flags);
- emit_u16(bytes, func.sig_index);
+ has_names = has_names || (func.name != undefined &&
+ func.name.length > 0);
+ exports += func.exports.length;
- if (hasName) emit_string(bytes, func.name);
+ emit_varint(bytes, func.sig_index);
+ }
+ // emit function bodies
+ if (debug) print("emitting function bodies @ " + bytes.length);
+ emit_u8(bytes, kDeclFunctionBodies);
+ emit_varint(bytes, this.functions.length);
+ for (func of this.functions) {
// Function body length will be patched later.
- var length_pos = bytes.length;
- emit_u16(bytes, 0);
-
var local_decls = [];
var l = func.locals;
if (l != undefined) {
@@ -207,28 +213,37 @@ WasmModuleBuilder.prototype.toArray = function(debug) {
local_decls.push({count: l.f64_count, type: kAstF64});
}
}
- emit_varint(bytes, local_decls.length);
+ var header = new Array();
+
+ emit_varint(header, local_decls.length);
for (decl of local_decls) {
- emit_varint(bytes, decl.count);
- emit_u8(bytes, decl.type);
+ emit_varint(header, decl.count);
+ emit_u8(header, decl.type);
}
- for (var i = 0; i < func.body.length; i++) {
- emit_u8(bytes, func.body[i]);
- }
- var length = bytes.length - length_pos - 2;
- bytes[length_pos] = length & 0xff;
- bytes[length_pos + 1] = (length >> 8) & 0xff;
+ emit_varint(bytes, header.length + func.body.length);
+ emit_bytes(bytes, header);
+ emit_bytes(bytes, func.body);
+ }
+ }
- index++;
+ // emit function names
+ if (has_names) {
+ if (debug) print("emitting names @ " + bytes.length);
+ emit_u8(bytes, kDeclNames);
+ emit_varint(bytes, this.functions.length);
+ for (func of this.functions) {
+ var name = func.name == undefined ? "" : func.name;
+ emit_string(bytes, name);
+ emit_u8(bytes, 0); // local names count == 0
}
}
// Add start function section.
if (this.start_index != undefined) {
if (debug) print("emitting start function @ " + bytes.length);
- emit_u8(bytes, kDeclStartFunction);
- emit_varint(bytes, this.start_index);
+ emit_u8(bytes, kDeclStartFunction);
+ emit_varint(bytes, this.start_index);
}
if (this.function_table.length > 0) {
@@ -259,18 +274,14 @@ WasmModuleBuilder.prototype.toArray = function(debug) {
for (seg of this.data_segments) {
emit_varint(bytes, seg.addr);
emit_varint(bytes, seg.data.length);
- for (var i = 0; i < seg.data.length; i++) {
- emit_u8(bytes, seg.data[i]);
- }
+ emit_bytes(bytes, seg.data);
}
}
// Emit any explicitly added sections
for (exp of this.explicit) {
if (debug) print("emitting explicit @ " + bytes.length);
- for (var i = 0; i < exp.length; i++) {
- emit_u8(bytes, exp[i]);
- }
+ emit_bytes(bytes, exp);
}
// End the module.
« no previous file with comments | « test/mjsunit/wasm/wasm-constants.js ('k') | test/unittests/wasm/module-decoder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698