Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 // Flags: --expose-wasm | 5 // Flags: --expose-wasm |
| 6 | 6 |
| 7 load("test/mjsunit/wasm/wasm-constants.js"); | 7 load("test/mjsunit/wasm/wasm-constants.js"); |
| 8 load("test/mjsunit/wasm/wasm-module-builder.js"); | 8 load("test/mjsunit/wasm/wasm-module-builder.js"); |
| 9 | 9 |
| 10 function AddFunctions(builder) { | 10 function AddFunctions(builder) { |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 364 // TODO(titzer): v8 currently requires import table size to match | 364 // TODO(titzer): v8 currently requires import table size to match |
| 365 // export table size. | 365 // export table size. |
| 366 var ffi = {y: {impfoo: i1.exports.expfoo}}; | 366 var ffi = {y: {impfoo: i1.exports.expfoo}}; |
| 367 if (expsize == impsize) { | 367 if (expsize == impsize) { |
| 368 var i2 = new WebAssembly.Instance(m2, ffi); | 368 var i2 = new WebAssembly.Instance(m2, ffi); |
| 369 } else { | 369 } else { |
| 370 assertThrows(() => new WebAssembly.Instance(m2, ffi)); | 370 assertThrows(() => new WebAssembly.Instance(m2, ffi)); |
| 371 } | 371 } |
| 372 } | 372 } |
| 373 } | 373 } |
| 374 })(); | |
| 374 | 375 |
| 376 (function TableGrowBoundsCheck() { | |
| 377 print("TableGrowBoundsCheck"); | |
| 378 var kMaxSize = 30, kInitSize = 5; | |
| 379 let table = new WebAssembly.Table({element: "anyfunc", | |
| 380 initial: kInitSize, maximum: kMaxSize}); | |
| 381 var builder = new WasmModuleBuilder(); | |
| 382 builder.addImportedTable("x", "table", kInitSize, kMaxSize); | |
| 383 let module = new WebAssembly.Module(builder.toBuffer()); | |
| 384 let instance = new WebAssembly.Instance(module, {x: {base: 1, table: table}}); | |
| 375 | 385 |
| 386 for(var i = kInitSize; i < kMaxSize; i+=5) { | |
| 387 assertEquals(i, table.length); | |
| 388 for (var j = 0; j < i; j++) table.set(j, null); | |
| 389 for (var j = 0; j < i; j++) assertEquals(null, table.get(j)); | |
| 390 assertThrows(() => table.set(i, null)); | |
| 391 assertThrows(() => table.get(i)); | |
| 392 assertEquals(i, table.grow(5)); | |
| 393 } | |
| 394 assertEquals(30, table.length); | |
| 395 assertThrows(() => table.grow(1)); | |
| 396 assertThrows(() => table.set(kMaxSize, null)); | |
| 397 assertThrows(() => table.get(kMaxSize)); | |
| 398 })(); | |
| 376 | 399 |
| 400 (function CumulativeGrowTest() { | |
| 401 print("CumulativeGrowTest..."); | |
| 402 let table = new WebAssembly.Table({element: "anyfunc", initial: 10, maximum: 3 0}); | |
|
bradnelson
2017/01/15 03:00:14
>80
gdeepti
2017/01/15 05:57:54
Done.
| |
| 403 var builder = new WasmModuleBuilder(); | |
| 404 builder.addImportedTable("x", "table", 10, 30); | |
| 405 | |
| 406 let g = builder.addImportedGlobal("x", "base", kWasmI32); | |
| 407 let sig_index = builder.addType(kSig_i_v); | |
| 408 builder.addFunction("g", sig_index) | |
| 409 .addBody([ | |
| 410 kExprGetGlobal, g | |
| 411 ]); | |
| 412 builder.addFunction("main", kSig_i_ii) | |
| 413 .addBody([ | |
| 414 kExprGetLocal, 0, | |
| 415 kExprCallIndirect, sig_index, kTableZero]) // -- | |
| 416 .exportAs("main"); | |
| 417 builder.addFunctionTableInit(g, true, [g]); | |
| 418 let module = new WebAssembly.Module(builder.toBuffer()); | |
| 419 | |
| 420 var instances = []; | |
| 421 for (var i = 0; i < 10; i++) { | |
| 422 print(" base = " + i); | |
| 423 instances.push(new WebAssembly.Instance( | |
| 424 module, {x: {base: i, table: table}})); | |
| 425 } | |
| 426 | |
| 427 for (var j = 0; j < 10; j++) { | |
| 428 let func = table.get(j); | |
| 429 assertEquals("function", typeof func); | |
| 430 assertEquals(j, func()); | |
| 431 assertEquals(j, instances[j].exports.main(j)); | |
| 432 } | |
| 433 | |
| 434 assertEquals(10, table.grow(10)); | |
| 435 | |
| 436 // Verify that grow does not alter function behaviors | |
| 437 for (var j = 0; j < 10; j++) { | |
| 438 let func = table.get(j); | |
| 439 assertEquals("function", typeof func); | |
| 440 assertEquals(j, func()); | |
| 441 assertEquals(j, instances[j].exports.main(j)); | |
| 442 } | |
| 443 | |
| 444 let new_builder = new WasmModuleBuilder(); | |
| 445 new_builder.addExport("wasm", new_builder.addFunction("", kSig_v_v)); | |
| 446 new_builder.addImportedTable("x", "table", 20, 30); | |
| 447 let new_module = new WebAssembly.Module(new_builder.toBuffer()); | |
| 448 let instance = new WebAssembly.Instance(new_module, {x: {table: table}}); | |
| 449 let new_func = instance.exports.wasm; | |
| 450 | |
| 451 for (var j = 10; j < 20; j++) { | |
| 452 table.set(j, new_func); | |
| 453 let func = table.get(j); | |
| 454 assertEquals("function", typeof func); | |
| 455 assertSame(new_func, table.get(j)); | |
| 456 } | |
| 457 assertThrows(() => table.grow(11)); | |
| 377 })(); | 458 })(); |
| OLD | NEW |