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

Side by Side Diff: test/mjsunit/wasm/wasm-module-builder.js

Issue 1896863003: [wasm] Binary 11: Module changes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 function WasmFunctionBuilder(name, sig_index) { 5 function WasmFunctionBuilder(name, sig_index) {
6 this.name = name; 6 this.name = name;
7 this.sig_index = sig_index; 7 this.sig_index = sig_index;
8 this.exports = []; 8 this.exports = [];
9 } 9 }
10 10
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 WasmModuleBuilder.prototype.addMemory = function(min, max, exp) { 46 WasmModuleBuilder.prototype.addMemory = function(min, max, exp) {
47 this.memory = {min: min, max: max, exp: exp}; 47 this.memory = {min: min, max: max, exp: exp};
48 return this; 48 return this;
49 } 49 }
50 50
51 WasmModuleBuilder.prototype.addExplicitSection = function(bytes) { 51 WasmModuleBuilder.prototype.addExplicitSection = function(bytes) {
52 this.explicit.push(bytes); 52 this.explicit.push(bytes);
53 return this; 53 return this;
54 } 54 }
55 55
56 // Add a signature; format is [rettype, param0, param1, ...] 56 // Add a signature; format is [param_count, param0, param1, ..., retcount, ret0]
57 WasmModuleBuilder.prototype.addSignature = function(sig) { 57 WasmModuleBuilder.prototype.addSignature = function(sig) {
58 // TODO: canonicalize signatures? 58 // TODO: canonicalize signatures?
59 this.signatures.push(sig); 59 this.signatures.push(sig);
60 return this.signatures.length - 1; 60 return this.signatures.length - 1;
61 } 61 }
62 62
63 WasmModuleBuilder.prototype.addFunction = function(name, sig) { 63 WasmModuleBuilder.prototype.addFunction = function(name, sig) {
64 var sig_index = (typeof sig) == "number" ? sig : this.addSignature(sig); 64 var sig_index = (typeof sig) == "number" ? sig : this.addSignature(sig);
65 var func = new WasmFunctionBuilder(name, sig_index); 65 var func = new WasmFunctionBuilder(name, sig_index);
66 func.index = this.functions.length; 66 func.index = this.functions.length;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 } 125 }
126 } 126 }
127 127
128 function emit_bytes(bytes, data) { 128 function emit_bytes(bytes, data) {
129 for (var i = 0; i < data.length; i++) { 129 for (var i = 0; i < data.length; i++) {
130 bytes.push(data[i] & 0xff); 130 bytes.push(data[i] & 0xff);
131 } 131 }
132 } 132 }
133 133
134 function emit_section(bytes, section_code, content_generator) { 134 function emit_section(bytes, section_code, content_generator) {
135 // Start the section in a temporary buffer: its full length isn't know yet. 135 // Emit section name.
136 emit_string(bytes, section_names[section_code]);
137 // Emit the section to a temporary buffer: its full length isn't know yet.
136 var tmp_bytes = []; 138 var tmp_bytes = [];
137 emit_string(tmp_bytes, section_names[section_code]);
138 content_generator(tmp_bytes); 139 content_generator(tmp_bytes);
139 // Now that we know the section length, emit it and copy the section. 140 // Emit section length.
140 emit_varint(bytes, tmp_bytes.length); 141 emit_varint(bytes, tmp_bytes.length);
142 // Copy the temporary buffer.
141 Array.prototype.push.apply(bytes, tmp_bytes); 143 Array.prototype.push.apply(bytes, tmp_bytes);
142 } 144 }
143 145
144 WasmModuleBuilder.prototype.toArray = function(debug) { 146 WasmModuleBuilder.prototype.toArray = function(debug) {
145 // Add header bytes 147 // Add header bytes
146 var bytes = []; 148 var bytes = [];
147 bytes = bytes.concat([kWasmH0, kWasmH1, kWasmH2, kWasmH3, 149 bytes = bytes.concat([kWasmH0, kWasmH1, kWasmH2, kWasmH3,
148 kWasmV0, kWasmV1, kWasmV2, kWasmV3]); 150 kWasmV0, kWasmV1, kWasmV2, kWasmV3]);
149 151
150 var wasm = this; 152 var wasm = this;
151 153
152 // Add signatures section 154 // Add signatures section
153 if (wasm.signatures.length > 0) { 155 if (wasm.signatures.length > 0) {
154 if (debug) print("emitting signatures @ " + bytes.length); 156 if (debug) print("emitting signatures @ " + bytes.length);
155 emit_section(bytes, kDeclSignatures, function(bytes) { 157 emit_section(bytes, kDeclSignatures, function(bytes) {
156 emit_varint(bytes, wasm.signatures.length); 158 emit_varint(bytes, wasm.signatures.length);
157 for (sig of wasm.signatures) { 159 for (sig of wasm.signatures) {
158 var params = sig.length - 1; 160 emit_u8(bytes, kWasmFunctionTypeForm);
159 emit_varint(bytes, params);
160 for (var j = 0; j < sig.length; j++) { 161 for (var j = 0; j < sig.length; j++) {
161 emit_u8(bytes, sig[j]); 162 emit_u8(bytes, sig[j]);
162 } 163 }
163 } 164 }
164 }); 165 });
165 } 166 }
166 167
167 // Add imports section 168 // Add imports section
168 if (wasm.imports.length > 0) { 169 if (wasm.imports.length > 0) {
169 if (debug) print("emitting imports @ " + bytes.length); 170 if (debug) print("emitting imports @ " + bytes.length);
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 } 335 }
335 336
336 WasmModuleBuilder.prototype.instantiate = function(ffi, memory) { 337 WasmModuleBuilder.prototype.instantiate = function(ffi, memory) {
337 var buffer = this.toBuffer(); 338 var buffer = this.toBuffer();
338 if (memory != undefined) { 339 if (memory != undefined) {
339 return Wasm.instantiateModule(buffer, ffi, memory); 340 return Wasm.instantiateModule(buffer, ffi, memory);
340 } else { 341 } else {
341 return Wasm.instantiateModule(buffer, ffi); 342 return Wasm.instantiateModule(buffer, ffi);
342 } 343 }
343 } 344 }
OLDNEW
« 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