| 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 --allow-natives-syntax | 5 // Flags: --expose-wasm --allow-natives-syntax |
| 6 | 6 |
| 7 if ((typeof drainJobQueue) != "function") { | 7 if ((typeof drainJobQueue) != "function") { |
| 8 drainJobQueue = () => { %RunMicrotasks() }; | 8 drainJobQueue = () => { %RunMicrotasks() }; |
| 9 } | 9 } |
| 10 | 10 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 let moduleBinaryWithMemSectionAndMemImport = (() => { | 57 let moduleBinaryWithMemSectionAndMemImport = (() => { |
| 58 var builder = new WasmModuleBuilder(); | 58 var builder = new WasmModuleBuilder(); |
| 59 builder.addMemory(1, 1, false); | 59 builder.addMemory(1, 1, false); |
| 60 builder.addImportedMemory("", "memory1"); | 60 builder.addImportedMemory("", "memory1"); |
| 61 return new Int8Array(builder.toBuffer()); | 61 return new Int8Array(builder.toBuffer()); |
| 62 })(); | 62 })(); |
| 63 | 63 |
| 64 // 'WebAssembly' data property on global object | 64 // 'WebAssembly' data property on global object |
| 65 let wasmDesc = Object.getOwnPropertyDescriptor(this, 'WebAssembly'); | 65 let wasmDesc = Object.getOwnPropertyDescriptor(this, 'WebAssembly'); |
| 66 assertEq(typeof wasmDesc.value, "object"); | 66 assertEq(typeof wasmDesc.value, "object"); |
| 67 assertEq(wasmDesc.writable, true); | 67 assertTrue(wasmDesc.writable); |
| 68 assertEq(wasmDesc.enumerable, false); | 68 assertFalse(wasmDesc.enumerable); |
| 69 assertEq(wasmDesc.configurable, true); | 69 assertTrue(wasmDesc.configurable); |
| 70 | 70 |
| 71 // 'WebAssembly' object | 71 // 'WebAssembly' object |
| 72 assertEq(WebAssembly, wasmDesc.value); | 72 assertEq(WebAssembly, wasmDesc.value); |
| 73 assertEq(String(WebAssembly), "[object WebAssembly]"); | 73 assertEq(String(WebAssembly), "[object WebAssembly]"); |
| 74 | 74 |
| 75 // 'WebAssembly.CompileError' | 75 // 'WebAssembly.CompileError' |
| 76 let compileErrorDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'CompileErro
r'); | 76 let compileErrorDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'CompileErro
r'); |
| 77 assertEq(typeof compileErrorDesc.value, "function"); | 77 assertEq(typeof compileErrorDesc.value, "function"); |
| 78 assertEq(compileErrorDesc.writable, true); | 78 assertTrue(compileErrorDesc.writable); |
| 79 assertEq(compileErrorDesc.enumerable, false); | 79 assertFalse(compileErrorDesc.enumerable); |
| 80 assertEq(compileErrorDesc.configurable, true); | 80 assertTrue(compileErrorDesc.configurable); |
| 81 let CompileError = WebAssembly.CompileError; | 81 let CompileError = WebAssembly.CompileError; |
| 82 assertEq(CompileError, compileErrorDesc.value); | 82 assertEq(CompileError, compileErrorDesc.value); |
| 83 assertEq(CompileError.length, 1); | 83 assertEq(CompileError.length, 1); |
| 84 assertEq(CompileError.name, "CompileError"); | 84 assertEq(CompileError.name, "CompileError"); |
| 85 let compileError = new CompileError; | 85 let compileError = new CompileError; |
| 86 assertEq(compileError instanceof CompileError, true); | 86 assertTrue(compileError instanceof CompileError); |
| 87 assertEq(compileError instanceof Error, true); | 87 assertTrue(compileError instanceof Error); |
| 88 assertEq(compileError instanceof TypeError, false); | 88 assertFalse(compileError instanceof TypeError); |
| 89 assertEq(compileError.message, ""); | 89 assertEq(compileError.message, ""); |
| 90 assertEq(new CompileError("hi").message, "hi"); | 90 assertEq(new CompileError("hi").message, "hi"); |
| 91 | 91 |
| 92 // 'WebAssembly.RuntimeError' | 92 // 'WebAssembly.RuntimeError' |
| 93 let runtimeErrorDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'RuntimeErro
r'); | 93 let runtimeErrorDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'RuntimeErro
r'); |
| 94 assertEq(typeof runtimeErrorDesc.value, "function"); | 94 assertEq(typeof runtimeErrorDesc.value, "function"); |
| 95 assertEq(runtimeErrorDesc.writable, true); | 95 assertTrue(runtimeErrorDesc.writable); |
| 96 assertEq(runtimeErrorDesc.enumerable, false); | 96 assertFalse(runtimeErrorDesc.enumerable); |
| 97 assertEq(runtimeErrorDesc.configurable, true); | 97 assertTrue(runtimeErrorDesc.configurable); |
| 98 let RuntimeError = WebAssembly.RuntimeError; | 98 let RuntimeError = WebAssembly.RuntimeError; |
| 99 assertEq(RuntimeError, runtimeErrorDesc.value); | 99 assertEq(RuntimeError, runtimeErrorDesc.value); |
| 100 assertEq(RuntimeError.length, 1); | 100 assertEq(RuntimeError.length, 1); |
| 101 assertEq(RuntimeError.name, "RuntimeError"); | 101 assertEq(RuntimeError.name, "RuntimeError"); |
| 102 let runtimeError = new RuntimeError; | 102 let runtimeError = new RuntimeError; |
| 103 assertEq(runtimeError instanceof RuntimeError, true); | 103 assertTrue(runtimeError instanceof RuntimeError); |
| 104 assertEq(runtimeError instanceof Error, true); | 104 assertTrue(runtimeError instanceof Error); |
| 105 assertEq(runtimeError instanceof TypeError, false); | 105 assertFalse(runtimeError instanceof TypeError); |
| 106 assertEq(runtimeError.message, ""); | 106 assertEq(runtimeError.message, ""); |
| 107 assertEq(new RuntimeError("hi").message, "hi"); | 107 assertEq(new RuntimeError("hi").message, "hi"); |
| 108 | 108 |
| 109 // 'WebAssembly.LinkError' | 109 // 'WebAssembly.LinkError' |
| 110 let linkErrorDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'LinkError'); | 110 let linkErrorDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'LinkError'); |
| 111 assertEq(typeof linkErrorDesc.value, "function"); | 111 assertEq(typeof linkErrorDesc.value, "function"); |
| 112 assertEq(linkErrorDesc.writable, true); | 112 assertTrue(linkErrorDesc.writable); |
| 113 assertEq(linkErrorDesc.enumerable, false); | 113 assertFalse(linkErrorDesc.enumerable); |
| 114 assertEq(linkErrorDesc.configurable, true); | 114 assertTrue(linkErrorDesc.configurable); |
| 115 let LinkError = WebAssembly.LinkError; | 115 let LinkError = WebAssembly.LinkError; |
| 116 assertEq(LinkError, linkErrorDesc.value); | 116 assertEq(LinkError, linkErrorDesc.value); |
| 117 assertEq(LinkError.length, 1); | 117 assertEq(LinkError.length, 1); |
| 118 assertEq(LinkError.name, "LinkError"); | 118 assertEq(LinkError.name, "LinkError"); |
| 119 let linkError = new LinkError; | 119 let linkError = new LinkError; |
| 120 assertEq(linkError instanceof LinkError, true); | 120 assertTrue(linkError instanceof LinkError); |
| 121 assertEq(linkError instanceof Error, true); | 121 assertTrue(linkError instanceof Error); |
| 122 assertEq(linkError instanceof TypeError, false); | 122 assertFalse(linkError instanceof TypeError); |
| 123 assertEq(linkError.message, ""); | 123 assertEq(linkError.message, ""); |
| 124 assertEq(new LinkError("hi").message, "hi"); | 124 assertEq(new LinkError("hi").message, "hi"); |
| 125 | 125 |
| 126 // 'WebAssembly.Module' data property | 126 // 'WebAssembly.Module' data property |
| 127 let moduleDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'Module'); | 127 let moduleDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'Module'); |
| 128 assertEq(typeof moduleDesc.value, "function"); | 128 assertEq(typeof moduleDesc.value, "function"); |
| 129 assertEq(moduleDesc.writable, true); | 129 assertTrue(moduleDesc.writable); |
| 130 assertEq(moduleDesc.enumerable, false); | 130 assertFalse(moduleDesc.enumerable); |
| 131 assertEq(moduleDesc.configurable, true); | 131 assertTrue(moduleDesc.configurable); |
| 132 | 132 |
| 133 // 'WebAssembly.Module' constructor function | 133 // 'WebAssembly.Module' constructor function |
| 134 let Module = WebAssembly.Module; | 134 let Module = WebAssembly.Module; |
| 135 assertEq(Module, moduleDesc.value); | 135 assertEq(Module, moduleDesc.value); |
| 136 assertEq(Module.length, 1); | 136 assertEq(Module.length, 1); |
| 137 assertEq(Module.name, "Module"); | 137 assertEq(Module.name, "Module"); |
| 138 assertErrorMessage(() => Module(), TypeError, /constructor without new is forbid
den/); | 138 assertErrorMessage(() => Module(), TypeError, /constructor without new is forbid
den/); |
| 139 assertErrorMessage(() => new Module(), TypeError, /requires more than 0 argument
s/); | 139 assertErrorMessage(() => new Module(), TypeError, /requires more than 0 argument
s/); |
| 140 assertErrorMessage(() => new Module(undefined), TypeError, "first argument must
be an ArrayBuffer or typed array object"); | 140 assertErrorMessage(() => new Module(undefined), TypeError, "first argument must
be an ArrayBuffer or typed array object"); |
| 141 assertErrorMessage(() => new Module(1), TypeError, "first argument must be an Ar
rayBuffer or typed array object"); | 141 assertErrorMessage(() => new Module(1), TypeError, "first argument must be an Ar
rayBuffer or typed array object"); |
| 142 assertErrorMessage(() => new Module({}), TypeError, "first argument must be an A
rrayBuffer or typed array object"); | 142 assertErrorMessage(() => new Module({}), TypeError, "first argument must be an A
rrayBuffer or typed array object"); |
| 143 assertErrorMessage(() => new Module(new Uint8Array()), CompileError, /failed to
match magic number/); | 143 assertErrorMessage(() => new Module(new Uint8Array()), CompileError, /failed to
match magic number/); |
| 144 assertErrorMessage(() => new Module(new ArrayBuffer()), CompileError, /failed to
match magic number/); | 144 assertErrorMessage(() => new Module(new ArrayBuffer()), CompileError, /failed to
match magic number/); |
| 145 assertEq(new Module(emptyModuleBinary) instanceof Module, true); | 145 assertTrue(new Module(emptyModuleBinary) instanceof Module); |
| 146 assertEq(new Module(emptyModuleBinary.buffer) instanceof Module, true); | 146 assertTrue(new Module(emptyModuleBinary.buffer) instanceof Module); |
| 147 | 147 |
| 148 // 'WebAssembly.Module.prototype' data property | 148 // 'WebAssembly.Module.prototype' data property |
| 149 let moduleProtoDesc = Object.getOwnPropertyDescriptor(Module, 'prototype'); | 149 let moduleProtoDesc = Object.getOwnPropertyDescriptor(Module, 'prototype'); |
| 150 assertEq(typeof moduleProtoDesc.value, "object"); | 150 assertEq(typeof moduleProtoDesc.value, "object"); |
| 151 assertEq(moduleProtoDesc.writable, false); | 151 assertFalse(moduleProtoDesc.writable); |
| 152 assertEq(moduleProtoDesc.enumerable, false); | 152 assertFalse(moduleProtoDesc.enumerable); |
| 153 assertEq(moduleProtoDesc.configurable, false); | 153 assertFalse(moduleProtoDesc.configurable); |
| 154 | 154 |
| 155 // 'WebAssembly.Module.prototype' object | 155 // 'WebAssembly.Module.prototype' object |
| 156 let moduleProto = Module.prototype; | 156 let moduleProto = Module.prototype; |
| 157 assertEq(moduleProto, moduleProtoDesc.value); | 157 assertEq(moduleProto, moduleProtoDesc.value); |
| 158 assertEq(String(moduleProto), "[object WebAssembly.Module]"); | 158 assertEq(String(moduleProto), "[object WebAssembly.Module]"); |
| 159 assertEq(Object.getPrototypeOf(moduleProto), Object.prototype); | 159 assertEq(Object.getPrototypeOf(moduleProto), Object.prototype); |
| 160 | 160 |
| 161 // 'WebAssembly.Module' instance objects | 161 // 'WebAssembly.Module' instance objects |
| 162 let emptyModule = new Module(emptyModuleBinary); | 162 let emptyModule = new Module(emptyModuleBinary); |
| 163 let importingModule = new Module(importingModuleBinary); | 163 let importingModule = new Module(importingModuleBinary); |
| 164 let exportingModule = new Module(exportingModuleBinary); | 164 let exportingModule = new Module(exportingModuleBinary); |
| 165 assertEq(typeof emptyModule, "object"); | 165 assertEq(typeof emptyModule, "object"); |
| 166 assertEq(String(emptyModule), "[object WebAssembly.Module]"); | 166 assertEq(String(emptyModule), "[object WebAssembly.Module]"); |
| 167 assertEq(Object.getPrototypeOf(emptyModule), moduleProto); | 167 assertEq(Object.getPrototypeOf(emptyModule), moduleProto); |
| 168 | 168 |
| 169 // 'WebAssembly.Module.imports' data property | 169 // 'WebAssembly.Module.imports' data property |
| 170 let moduleImportsDesc = Object.getOwnPropertyDescriptor(Module, 'imports'); | 170 let moduleImportsDesc = Object.getOwnPropertyDescriptor(Module, 'imports'); |
| 171 assertEq(typeof moduleImportsDesc.value, "function"); | 171 assertEq(typeof moduleImportsDesc.value, "function"); |
| 172 assertEq(moduleImportsDesc.writable, true); | 172 assertTrue(moduleImportsDesc.writable); |
| 173 assertEq(moduleImportsDesc.enumerable, false); | 173 assertFalse(moduleImportsDesc.enumerable); |
| 174 assertEq(moduleImportsDesc.configurable, true); | 174 assertTrue(moduleImportsDesc.configurable); |
| 175 | 175 |
| 176 // 'WebAssembly.Module.imports' method | 176 // 'WebAssembly.Module.imports' method |
| 177 let moduleImports = moduleImportsDesc.value; | 177 let moduleImports = moduleImportsDesc.value; |
| 178 assertEq(moduleImports.length, 1); | 178 assertEq(moduleImports.length, 1); |
| 179 assertErrorMessage(() => moduleImports(), TypeError, /requires more than 0 argum
ents/); | 179 assertErrorMessage(() => moduleImports(), TypeError, /requires more than 0 argum
ents/); |
| 180 assertErrorMessage(() => moduleImports(undefined), TypeError, /first argument mu
st be a WebAssembly.Module/); | 180 assertErrorMessage(() => moduleImports(undefined), TypeError, /first argument mu
st be a WebAssembly.Module/); |
| 181 assertErrorMessage(() => moduleImports({}), TypeError, /first argument must be a
WebAssembly.Module/); | 181 assertErrorMessage(() => moduleImports({}), TypeError, /first argument must be a
WebAssembly.Module/); |
| 182 var arr = moduleImports(new Module(emptyModuleBinary)); | 182 var arr = moduleImports(new Module(emptyModuleBinary)); |
| 183 assertEq(arr instanceof Array, true); | 183 assertTrue(arr instanceof Array); |
| 184 assertEq(arr.length, 0); | 184 assertEq(arr.length, 0); |
| 185 let importingModuleBinary2 = (() => { | 185 let importingModuleBinary2 = (() => { |
| 186 var text = '(module (func (import "a" "b")) (memory (import "c" "d") 1) (table
(import "e" "f") 1 anyfunc) (global (import "g" "⚡") i32))' | 186 var text = '(module (func (import "a" "b")) (memory (import "c" "d") 1) (table
(import "e" "f") 1 anyfunc) (global (import "g" "⚡") i32))' |
| 187 let builder = new WasmModuleBuilder(); | 187 let builder = new WasmModuleBuilder(); |
| 188 builder.addImport("a", "b", kSig_i_i); | 188 builder.addImport("a", "b", kSig_i_i); |
| 189 builder.addImportedMemory("c", "d"); | 189 builder.addImportedMemory("c", "d"); |
| 190 builder.addImportedTable("e", "f"); | 190 builder.addImportedTable("e", "f"); |
| 191 builder.addImportedGlobal("g", "x", kWasmI32); | 191 builder.addImportedGlobal("g", "x", kWasmI32); |
| 192 return new Int8Array(builder.toBuffer()); | 192 return new Int8Array(builder.toBuffer()); |
| 193 })(); | 193 })(); |
| 194 var arr = moduleImports(new Module(importingModuleBinary2)); | 194 var arr = moduleImports(new Module(importingModuleBinary2)); |
| 195 assertEq(arr instanceof Array, true); | 195 assertTrue(arr instanceof Array); |
| 196 assertEq(arr.length, 4); | 196 assertEq(arr.length, 4); |
| 197 assertEq(arr[0].kind, "function"); | 197 assertEq(arr[0].kind, "function"); |
| 198 assertEq(arr[0].module, "a"); | 198 assertEq(arr[0].module, "a"); |
| 199 assertEq(arr[0].name, "b"); | 199 assertEq(arr[0].name, "b"); |
| 200 assertEq(arr[1].kind, "memory"); | 200 assertEq(arr[1].kind, "memory"); |
| 201 assertEq(arr[1].module, "c"); | 201 assertEq(arr[1].module, "c"); |
| 202 assertEq(arr[1].name, "d"); | 202 assertEq(arr[1].name, "d"); |
| 203 assertEq(arr[2].kind, "table"); | 203 assertEq(arr[2].kind, "table"); |
| 204 assertEq(arr[2].module, "e"); | 204 assertEq(arr[2].module, "e"); |
| 205 assertEq(arr[2].name, "f"); | 205 assertEq(arr[2].name, "f"); |
| 206 assertEq(arr[3].kind, "global"); | 206 assertEq(arr[3].kind, "global"); |
| 207 assertEq(arr[3].module, "g"); | 207 assertEq(arr[3].module, "g"); |
| 208 assertEq(arr[3].name, "x"); | 208 assertEq(arr[3].name, "x"); |
| 209 | 209 |
| 210 // 'WebAssembly.Module.exports' data property | 210 // 'WebAssembly.Module.exports' data property |
| 211 let moduleExportsDesc = Object.getOwnPropertyDescriptor(Module, 'exports'); | 211 let moduleExportsDesc = Object.getOwnPropertyDescriptor(Module, 'exports'); |
| 212 assertEq(typeof moduleExportsDesc.value, "function"); | 212 assertEq(typeof moduleExportsDesc.value, "function"); |
| 213 assertEq(moduleExportsDesc.writable, true); | 213 assertTrue(moduleExportsDesc.writable); |
| 214 assertEq(moduleExportsDesc.enumerable, false); | 214 assertFalse(moduleExportsDesc.enumerable); |
| 215 assertEq(moduleExportsDesc.configurable, true); | 215 assertTrue(moduleExportsDesc.configurable); |
| 216 | 216 |
| 217 // 'WebAssembly.Module.exports' method | 217 // 'WebAssembly.Module.exports' method |
| 218 let moduleExports = moduleExportsDesc.value; | 218 let moduleExports = moduleExportsDesc.value; |
| 219 assertEq(moduleExports.length, 1); | 219 assertEq(moduleExports.length, 1); |
| 220 assertErrorMessage(() => moduleExports(), TypeError, /requires more than 0 argum
ents/); | 220 assertErrorMessage(() => moduleExports(), TypeError, /requires more than 0 argum
ents/); |
| 221 assertErrorMessage(() => moduleExports(undefined), TypeError, /first argument mu
st be a WebAssembly.Module/); | 221 assertErrorMessage(() => moduleExports(undefined), TypeError, /first argument mu
st be a WebAssembly.Module/); |
| 222 assertErrorMessage(() => moduleExports({}), TypeError, /first argument must be a
WebAssembly.Module/); | 222 assertErrorMessage(() => moduleExports({}), TypeError, /first argument must be a
WebAssembly.Module/); |
| 223 var arr = moduleExports(emptyModule); | 223 var arr = moduleExports(emptyModule); |
| 224 assertEq(arr instanceof Array, true); | 224 assertTrue(arr instanceof Array); |
| 225 assertEq(arr.length, 0); | 225 assertEq(arr.length, 0); |
| 226 let exportingModuleBinary2 = (() => { | 226 let exportingModuleBinary2 = (() => { |
| 227 var text = | 227 var text = |
| 228 '(module (func (export "a")) (memory (export "b") 1) (table (export "c") 1 any
func) (global (export "⚡") i32 (i32.const 0)))'; | 228 '(module (func (export "a")) (memory (export "b") 1) (table (export "c") 1 any
func) (global (export "⚡") i32 (i32.const 0)))'; |
| 229 let builder = new WasmModuleBuilder(); | 229 let builder = new WasmModuleBuilder(); |
| 230 builder.addFunction("foo", kSig_v_v) | 230 builder.addFunction("foo", kSig_v_v) |
| 231 .addBody([]) | 231 .addBody([]) |
| 232 .exportAs("a"); | 232 .exportAs("a"); |
| 233 builder.addMemory(1, 1, false); | 233 builder.addMemory(1, 1, false); |
| 234 builder.exportMemoryAs("b"); | 234 builder.exportMemoryAs("b"); |
| 235 builder.setFunctionTableLength(1); | 235 builder.setFunctionTableLength(1); |
| 236 builder.addExportOfKind("c", kExternalTable, 0); | 236 builder.addExportOfKind("c", kExternalTable, 0); |
| 237 var o = builder.addGlobal(kWasmI32, false) | 237 var o = builder.addGlobal(kWasmI32, false) |
| 238 .exportAs("x"); | 238 .exportAs("x"); |
| 239 return new Int8Array(builder.toBuffer()); | 239 return new Int8Array(builder.toBuffer()); |
| 240 })(); | 240 })(); |
| 241 var arr = moduleExports(new Module(exportingModuleBinary2)); | 241 var arr = moduleExports(new Module(exportingModuleBinary2)); |
| 242 assertEq(arr instanceof Array, true); | 242 assertTrue(arr instanceof Array); |
| 243 assertEq(arr.length, 4); | 243 assertEq(arr.length, 4); |
| 244 assertEq(arr[0].kind, "function"); | 244 assertEq(arr[0].kind, "function"); |
| 245 assertEq(arr[0].name, "a"); | 245 assertEq(arr[0].name, "a"); |
| 246 assertEq(arr[1].kind, "memory"); | 246 assertEq(arr[1].kind, "memory"); |
| 247 assertEq(arr[1].name, "b"); | 247 assertEq(arr[1].name, "b"); |
| 248 assertEq(arr[2].kind, "table"); | 248 assertEq(arr[2].kind, "table"); |
| 249 assertEq(arr[2].name, "c"); | 249 assertEq(arr[2].name, "c"); |
| 250 assertEq(arr[3].kind, "global"); | 250 assertEq(arr[3].kind, "global"); |
| 251 assertEq(arr[3].name, "x"); | 251 assertEq(arr[3].name, "x"); |
| 252 | 252 |
| 253 // 'WebAssembly.Instance' data property | 253 // 'WebAssembly.Instance' data property |
| 254 let instanceDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'Instance'); | 254 let instanceDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'Instance'); |
| 255 assertEq(typeof instanceDesc.value, "function"); | 255 assertEq(typeof instanceDesc.value, "function"); |
| 256 assertEq(instanceDesc.writable, true); | 256 assertTrue(instanceDesc.writable); |
| 257 assertEq(instanceDesc.enumerable, false); | 257 assertFalse(instanceDesc.enumerable); |
| 258 assertEq(instanceDesc.configurable, true); | 258 assertTrue(instanceDesc.configurable); |
| 259 | 259 |
| 260 // 'WebAssembly.Instance' constructor function | 260 // 'WebAssembly.Instance' constructor function |
| 261 let Instance = WebAssembly.Instance; | 261 let Instance = WebAssembly.Instance; |
| 262 assertEq(Instance, instanceDesc.value); | 262 assertEq(Instance, instanceDesc.value); |
| 263 assertEq(Instance.length, 1); | 263 assertEq(Instance.length, 1); |
| 264 assertEq(Instance.name, "Instance"); | 264 assertEq(Instance.name, "Instance"); |
| 265 | 265 |
| 266 assertErrorMessage(() => Instance(), TypeError, /constructor without new is forb
idden/); | 266 assertErrorMessage(() => Instance(), TypeError, /constructor without new is forb
idden/); |
| 267 assertErrorMessage(() => new Instance(1), TypeError, "first argument must be a W
ebAssembly.Module"); | 267 assertErrorMessage(() => new Instance(1), TypeError, "first argument must be a W
ebAssembly.Module"); |
| 268 assertErrorMessage(() => new Instance({}), TypeError, "first argument must be a
WebAssembly.Module"); | 268 assertErrorMessage(() => new Instance({}), TypeError, "first argument must be a
WebAssembly.Module"); |
| 269 assertErrorMessage(() => new Instance(emptyModule, null), TypeError, "second arg
ument must be an object"); | 269 assertErrorMessage(() => new Instance(emptyModule, null), TypeError, "second arg
ument must be an object"); |
| 270 assertErrorMessage(() => new Instance(importingModule, null), TypeError, ""); | 270 assertErrorMessage(() => new Instance(importingModule, null), TypeError, ""); |
| 271 assertErrorMessage(() => new Instance(importingModule, undefined), TypeError, ""
); | 271 assertErrorMessage(() => new Instance(importingModule, undefined), TypeError, ""
); |
| 272 assertErrorMessage(() => new Instance(importingModule, {"":{g:()=>{}}}), LinkErr
or, ""); | 272 assertErrorMessage(() => new Instance(importingModule, {"":{g:()=>{}}}), LinkErr
or, ""); |
| 273 assertErrorMessage(() => new Instance(importingModule, {t:{f:()=>{}}}), LinkErro
r, ""); | 273 assertErrorMessage(() => new Instance(importingModule, {t:{f:()=>{}}}), LinkErro
r, ""); |
| 274 | 274 |
| 275 assertEq(new Instance(emptyModule) instanceof Instance, true); | 275 assertTrue(new Instance(emptyModule) instanceof Instance); |
| 276 assertEq(new Instance(emptyModule, {}) instanceof Instance, true); | 276 assertTrue(new Instance(emptyModule, {}) instanceof Instance); |
| 277 | 277 |
| 278 // 'WebAssembly.Instance.prototype' data property | 278 // 'WebAssembly.Instance.prototype' data property |
| 279 let instanceProtoDesc = Object.getOwnPropertyDescriptor(Instance, 'prototype'); | 279 let instanceProtoDesc = Object.getOwnPropertyDescriptor(Instance, 'prototype'); |
| 280 assertEq(typeof instanceProtoDesc.value, "object"); | 280 assertEq(typeof instanceProtoDesc.value, "object"); |
| 281 assertEq(instanceProtoDesc.writable, false); | 281 assertFalse(instanceProtoDesc.writable); |
| 282 assertEq(instanceProtoDesc.enumerable, false); | 282 assertFalse(instanceProtoDesc.enumerable); |
| 283 assertEq(instanceProtoDesc.configurable, false); | 283 assertFalse(instanceProtoDesc.configurable); |
| 284 | 284 |
| 285 // 'WebAssembly.Instance.prototype' object | 285 // 'WebAssembly.Instance.prototype' object |
| 286 let instanceProto = Instance.prototype; | 286 let instanceProto = Instance.prototype; |
| 287 assertEq(instanceProto, instanceProtoDesc.value); | 287 assertEq(instanceProto, instanceProtoDesc.value); |
| 288 assertEq(String(instanceProto), "[object WebAssembly.Instance]"); | 288 assertEq(String(instanceProto), "[object WebAssembly.Instance]"); |
| 289 assertEq(Object.getPrototypeOf(instanceProto), Object.prototype); | 289 assertEq(Object.getPrototypeOf(instanceProto), Object.prototype); |
| 290 | 290 |
| 291 // 'WebAssembly.Instance' instance objects | 291 // 'WebAssembly.Instance' instance objects |
| 292 let exportingInstance = new Instance(exportingModule); | 292 let exportingInstance = new Instance(exportingModule); |
| 293 assertEq(typeof exportingInstance, "object"); | 293 assertEq(typeof exportingInstance, "object"); |
| 294 assertEq(String(exportingInstance), "[object WebAssembly.Instance]"); | 294 assertEq(String(exportingInstance), "[object WebAssembly.Instance]"); |
| 295 assertEq(Object.getPrototypeOf(exportingInstance), instanceProto); | 295 assertEq(Object.getPrototypeOf(exportingInstance), instanceProto); |
| 296 | 296 |
| 297 // 'WebAssembly.Instance' 'exports' data property | 297 // 'WebAssembly.Instance' 'exports' data property |
| 298 let instanceExportsDesc = Object.getOwnPropertyDescriptor(exportingInstance, 'ex
ports'); | 298 let instanceExportsDesc = Object.getOwnPropertyDescriptor(exportingInstance, 'ex
ports'); |
| 299 assertEq(typeof instanceExportsDesc.value, "object"); | 299 assertEq(typeof instanceExportsDesc.value, "object"); |
| 300 assertEq(instanceExportsDesc.writable, true); | 300 assertTrue(instanceExportsDesc.writable); |
| 301 assertEq(instanceExportsDesc.enumerable, true); | 301 assertTrue(instanceExportsDesc.enumerable); |
| 302 assertEq(instanceExportsDesc.configurable, true); | 302 assertTrue(instanceExportsDesc.configurable); |
| 303 | 303 |
| 304 // Exported WebAssembly functions | 304 // Exported WebAssembly functions |
| 305 let f = exportingInstance.exports.f; | 305 let f = exportingInstance.exports.f; |
| 306 assertEq(f instanceof Function, true); | 306 assertTrue(f instanceof Function); |
| 307 assertEq(f.length, 0); | 307 assertEq(f.length, 0); |
| 308 assertEq('name' in f, true); | 308 assertTrue('name' in f); |
| 309 assertEq(Function.prototype.call.call(f), 42); | 309 assertEq(Function.prototype.call.call(f), 42); |
| 310 assertErrorMessage(() => new f(), TypeError, /is not a constructor/); | 310 assertErrorMessage(() => new f(), TypeError, /is not a constructor/); |
| 311 | 311 |
| 312 // 'WebAssembly.Memory' data property | 312 // 'WebAssembly.Memory' data property |
| 313 let memoryDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'Memory'); | 313 let memoryDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'Memory'); |
| 314 assertEq(typeof memoryDesc.value, "function"); | 314 assertEq(typeof memoryDesc.value, "function"); |
| 315 assertEq(memoryDesc.writable, true); | 315 assertTrue(memoryDesc.writable); |
| 316 assertEq(memoryDesc.enumerable, false); | 316 assertFalse(memoryDesc.enumerable); |
| 317 assertEq(memoryDesc.configurable, true); | 317 assertTrue(memoryDesc.configurable); |
| 318 | 318 |
| 319 // 'WebAssembly.Memory' constructor function | 319 // 'WebAssembly.Memory' constructor function |
| 320 let Memory = WebAssembly.Memory; | 320 let Memory = WebAssembly.Memory; |
| 321 assertEq(Memory, memoryDesc.value); | 321 assertEq(Memory, memoryDesc.value); |
| 322 assertEq(Memory.length, 1); | 322 assertEq(Memory.length, 1); |
| 323 assertEq(Memory.name, "Memory"); | 323 assertEq(Memory.name, "Memory"); |
| 324 assertErrorMessage(() => Memory(), TypeError, /constructor without new is forbid
den/); | 324 assertErrorMessage(() => Memory(), TypeError, /constructor without new is forbid
den/); |
| 325 assertErrorMessage(() => new Memory(1), TypeError, "first argument must be a mem
ory descriptor"); | 325 assertErrorMessage(() => new Memory(1), TypeError, "first argument must be a mem
ory descriptor"); |
| 326 assertErrorMessage(() => new Memory({initial:{valueOf() { throw new Error("here"
)}}}), Error, "here"); | 326 assertErrorMessage(() => new Memory({initial:{valueOf() { throw new Error("here"
)}}}), Error, "here"); |
| 327 assertErrorMessage(() => new Memory({initial:-1}), RangeError, /bad Memory initi
al size/); | 327 assertErrorMessage(() => new Memory({initial:-1}), RangeError, /bad Memory initi
al size/); |
| 328 assertErrorMessage(() => new Memory({initial:Math.pow(2,32)}), RangeError, /bad
Memory initial size/); | 328 assertErrorMessage(() => new Memory({initial:Math.pow(2,32)}), RangeError, /bad
Memory initial size/); |
| 329 assertErrorMessage(() => new Memory({initial:1, maximum: Math.pow(2,32)/Math.pow
(2,14) }), RangeError, /bad Memory maximum size/); | 329 assertErrorMessage(() => new Memory({initial:1, maximum: Math.pow(2,32)/Math.pow
(2,14) }), RangeError, /bad Memory maximum size/); |
| 330 assertErrorMessage(() => new Memory({initial:2, maximum:1 }), RangeError, /bad M
emory maximum size/); | 330 assertErrorMessage(() => new Memory({initial:2, maximum:1 }), RangeError, /bad M
emory maximum size/); |
| 331 assertErrorMessage(() => new Memory({maximum: -1 }), RangeError, /bad Memory max
imum size/); | 331 assertErrorMessage(() => new Memory({maximum: -1 }), RangeError, /bad Memory max
imum size/); |
| 332 assertEq(new Memory({initial:1}) instanceof Memory, true); | 332 assertTrue(new Memory({initial: 1}) instanceof Memory); |
| 333 assertEq(new Memory({initial:1.5}).buffer.byteLength, kPageSize); | 333 assertEq(new Memory({initial:1.5}).buffer.byteLength, kPageSize); |
| 334 | 334 |
| 335 // 'WebAssembly.Memory.prototype' data property | 335 // 'WebAssembly.Memory.prototype' data property |
| 336 let memoryProtoDesc = Object.getOwnPropertyDescriptor(Memory, 'prototype'); | 336 let memoryProtoDesc = Object.getOwnPropertyDescriptor(Memory, 'prototype'); |
| 337 assertEq(typeof memoryProtoDesc.value, "object"); | 337 assertEq(typeof memoryProtoDesc.value, "object"); |
| 338 assertEq(memoryProtoDesc.writable, false); | 338 assertFalse(memoryProtoDesc.writable); |
| 339 assertEq(memoryProtoDesc.enumerable, false); | 339 assertFalse(memoryProtoDesc.enumerable); |
| 340 assertEq(memoryProtoDesc.configurable, false); | 340 assertFalse(memoryProtoDesc.configurable); |
| 341 | 341 |
| 342 // 'WebAssembly.Memory.prototype' object | 342 // 'WebAssembly.Memory.prototype' object |
| 343 let memoryProto = Memory.prototype; | 343 let memoryProto = Memory.prototype; |
| 344 assertEq(memoryProto, memoryProtoDesc.value); | 344 assertEq(memoryProto, memoryProtoDesc.value); |
| 345 assertEq(String(memoryProto), "[object WebAssembly.Memory]"); | 345 assertEq(String(memoryProto), "[object WebAssembly.Memory]"); |
| 346 assertEq(Object.getPrototypeOf(memoryProto), Object.prototype); | 346 assertEq(Object.getPrototypeOf(memoryProto), Object.prototype); |
| 347 | 347 |
| 348 // 'WebAssembly.Memory' instance objects | 348 // 'WebAssembly.Memory' instance objects |
| 349 let mem1 = new Memory({initial:1}); | 349 let mem1 = new Memory({initial:1}); |
| 350 assertEq(typeof mem1, "object"); | 350 assertEq(typeof mem1, "object"); |
| 351 assertEq(String(mem1), "[object WebAssembly.Memory]"); | 351 assertEq(String(mem1), "[object WebAssembly.Memory]"); |
| 352 assertEq(Object.getPrototypeOf(mem1), memoryProto); | 352 assertEq(Object.getPrototypeOf(mem1), memoryProto); |
| 353 | 353 |
| 354 // 'WebAssembly.Memory.prototype.buffer' accessor property | 354 // 'WebAssembly.Memory.prototype.buffer' accessor property |
| 355 let bufferDesc = Object.getOwnPropertyDescriptor(memoryProto, 'buffer'); | 355 let bufferDesc = Object.getOwnPropertyDescriptor(memoryProto, 'buffer'); |
| 356 assertEq(typeof bufferDesc.get, "function"); | 356 assertEq(typeof bufferDesc.get, "function"); |
| 357 assertEq(bufferDesc.set, undefined); | 357 assertEq(bufferDesc.set, undefined); |
| 358 assertEq(bufferDesc.enumerable, false); | 358 assertFalse(bufferDesc.enumerable); |
| 359 assertEq(bufferDesc.configurable, true); | 359 assertTrue(bufferDesc.configurable); |
| 360 | 360 |
| 361 // 'WebAssembly.Memory.prototype.buffer' getter | 361 // 'WebAssembly.Memory.prototype.buffer' getter |
| 362 let bufferGetter = bufferDesc.get; | 362 let bufferGetter = bufferDesc.get; |
| 363 assertErrorMessage(() => bufferGetter.call(), TypeError, /called on incompatible
undefined/); | 363 assertErrorMessage(() => bufferGetter.call(), TypeError, /called on incompatible
undefined/); |
| 364 assertErrorMessage(() => bufferGetter.call({}), TypeError, /called on incompatib
le Object/); | 364 assertErrorMessage(() => bufferGetter.call({}), TypeError, /called on incompatib
le Object/); |
| 365 assertEq(bufferGetter.call(mem1) instanceof ArrayBuffer, true); | 365 assertTrue(bufferGetter.call(mem1) instanceof ArrayBuffer); |
| 366 assertEq(bufferGetter.call(mem1).byteLength, kPageSize); | 366 assertEq(bufferGetter.call(mem1).byteLength, kPageSize); |
| 367 | 367 |
| 368 // 'WebAssembly.Memory.prototype.grow' data property | 368 // 'WebAssembly.Memory.prototype.grow' data property |
| 369 let memGrowDesc = Object.getOwnPropertyDescriptor(memoryProto, 'grow'); | 369 let memGrowDesc = Object.getOwnPropertyDescriptor(memoryProto, 'grow'); |
| 370 assertEq(typeof memGrowDesc.value, "function"); | 370 assertEq(typeof memGrowDesc.value, "function"); |
| 371 assertEq(memGrowDesc.enumerable, false); | 371 assertFalse(memGrowDesc.enumerable); |
| 372 assertEq(memGrowDesc.configurable, true); | 372 assertTrue(memGrowDesc.configurable); |
| 373 | 373 |
| 374 // 'WebAssembly.Memory.prototype.grow' method | 374 // 'WebAssembly.Memory.prototype.grow' method |
| 375 | 375 |
| 376 let memGrow = memGrowDesc.value; | 376 let memGrow = memGrowDesc.value; |
| 377 assertEq(memGrow.length, 1); | 377 assertEq(memGrow.length, 1); |
| 378 assertErrorMessage(() => memGrow.call(), TypeError, | 378 assertErrorMessage(() => memGrow.call(), TypeError, |
| 379 /called on incompatible undefined/); | 379 /called on incompatible undefined/); |
| 380 assertErrorMessage(() => memGrow.call({}), TypeError, | 380 assertErrorMessage(() => memGrow.call({}), TypeError, |
| 381 /called on incompatible Object/); | 381 /called on incompatible Object/); |
| 382 assertErrorMessage(() => memGrow.call(mem1, -1), RangeError, | 382 assertErrorMessage(() => memGrow.call(mem1, -1), RangeError, |
| 383 /bad Memory grow delta/); | 383 /bad Memory grow delta/); |
| 384 assertErrorMessage(() => memGrow.call(mem1, Math.pow(2,32)), RangeError, | 384 assertErrorMessage(() => memGrow.call(mem1, Math.pow(2,32)), RangeError, |
| 385 /bad Memory grow delta/); | 385 /bad Memory grow delta/); |
| 386 var mem = new Memory({initial:1, maximum:2}); | 386 var mem = new Memory({initial:1, maximum:2}); |
| 387 var buf = mem.buffer; | 387 var buf = mem.buffer; |
| 388 assertEq(buf.byteLength, kPageSize); | 388 assertEq(buf.byteLength, kPageSize); |
| 389 assertEq(mem.grow(0), 1); | 389 assertEq(mem.grow(0), 1); |
| 390 // TODO(gdeepti): Pending spec clarification | 390 // TODO(gdeepti): Pending spec clarification |
| 391 // assertEq(buf !== mem.buffer, true); | 391 // assertTrue(buf !== mem.buffer); |
| 392 // assertEq(buf.byteLength, 0); | 392 // assertEq(buf.byteLength, 0); |
| 393 buf = mem.buffer; | 393 buf = mem.buffer; |
| 394 assertEq(buf.byteLength, kPageSize); | 394 assertEq(buf.byteLength, kPageSize); |
| 395 assertEq(mem.grow(1), 1); | 395 assertEq(mem.grow(1), 1); |
| 396 // TODO(gdeepti): assertEq(buf !== mem.buffer, true); | 396 // TODO(gdeepti): assertTrue(buf !== mem.buffer); |
| 397 // TODO(gdeepti): assertEq(buf.byteLength, 0); | 397 // TODO(gdeepti): assertEq(buf.byteLength, 0); |
| 398 buf = mem.buffer; | 398 buf = mem.buffer; |
| 399 assertEq(buf.byteLength, 2 * kPageSize); | 399 assertEq(buf.byteLength, 2 * kPageSize); |
| 400 assertErrorMessage(() => mem.grow(1), Error, /failed to grow memory/); | 400 assertErrorMessage(() => mem.grow(1), Error, /failed to grow memory/); |
| 401 assertEq(buf, mem.buffer); | 401 assertEq(buf, mem.buffer); |
| 402 | 402 |
| 403 // 'WebAssembly.Table' data property | 403 // 'WebAssembly.Table' data property |
| 404 let tableDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'Table'); | 404 let tableDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'Table'); |
| 405 assertEq(typeof tableDesc.value, "function"); | 405 assertEq(typeof tableDesc.value, "function"); |
| 406 assertEq(tableDesc.writable, true); | 406 assertTrue(tableDesc.writable); |
| 407 assertEq(tableDesc.enumerable, false); | 407 assertFalse(tableDesc.enumerable); |
| 408 assertEq(tableDesc.configurable, true); | 408 assertTrue(tableDesc.configurable); |
| 409 | 409 |
| 410 // 'WebAssembly.Table' constructor function | 410 // 'WebAssembly.Table' constructor function |
| 411 let Table = WebAssembly.Table; | 411 let Table = WebAssembly.Table; |
| 412 assertEq(Table, tableDesc.value); | 412 assertEq(Table, tableDesc.value); |
| 413 assertEq(Table.length, 1); | 413 assertEq(Table.length, 1); |
| 414 assertEq(Table.name, "Table"); | 414 assertEq(Table.name, "Table"); |
| 415 assertErrorMessage(() => Table(), TypeError, /constructor without new is forbidd
en/); | 415 assertErrorMessage(() => Table(), TypeError, /constructor without new is forbidd
en/); |
| 416 assertErrorMessage(() => new Table(1), TypeError, "first argument must be a tabl
e descriptor"); | 416 assertErrorMessage(() => new Table(1), TypeError, "first argument must be a tabl
e descriptor"); |
| 417 assertErrorMessage(() => new Table({initial:1, element:1}), TypeError, /must be
"anyfunc"/); | 417 assertErrorMessage(() => new Table({initial:1, element:1}), TypeError, /must be
"anyfunc"/); |
| 418 assertErrorMessage(() => new Table({initial:1, element:"any"}), TypeError, /must
be "anyfunc"/); | 418 assertErrorMessage(() => new Table({initial:1, element:"any"}), TypeError, /must
be "anyfunc"/); |
| 419 assertErrorMessage(() => new Table({initial:1, element:{valueOf() { return "anyf
unc" }}}), TypeError, /must be "anyfunc"/); | 419 assertErrorMessage(() => new Table({initial:1, element:{valueOf() { return "anyf
unc" }}}), TypeError, /must be "anyfunc"/); |
| 420 assertErrorMessage(() => new Table({initial:{valueOf() { throw new Error("here")
}}, element:"anyfunc"}), Error, "here"); | 420 assertErrorMessage(() => new Table({initial:{valueOf() { throw new Error("here")
}}, element:"anyfunc"}), Error, "here"); |
| 421 assertErrorMessage(() => new Table({initial:-1, element:"anyfunc"}), RangeError,
/bad Table initial size/); | 421 assertErrorMessage(() => new Table({initial:-1, element:"anyfunc"}), RangeError,
/bad Table initial size/); |
| 422 assertErrorMessage(() => new Table({initial:Math.pow(2,32), element:"anyfunc"}),
RangeError, /bad Table initial size/); | 422 assertErrorMessage(() => new Table({initial:Math.pow(2,32), element:"anyfunc"}),
RangeError, /bad Table initial size/); |
| 423 assertErrorMessage(() => new Table({initial:2, maximum:1, element:"anyfunc"}), R
angeError, /bad Table maximum size/); | 423 assertErrorMessage(() => new Table({initial:2, maximum:1, element:"anyfunc"}), R
angeError, /bad Table maximum size/); |
| 424 assertErrorMessage(() => new Table({initial:2, maximum:Math.pow(2,32), element:"
anyfunc"}), RangeError, /bad Table maximum size/); | 424 assertErrorMessage(() => new Table({initial:2, maximum:Math.pow(2,32), element:"
anyfunc"}), RangeError, /bad Table maximum size/); |
| 425 assertEq(new Table({initial:1, element:"anyfunc"}) instanceof Table, true); | 425 assertTrue(new Table({initial: 1, element: 'anyfunc'}) instanceof Table); |
| 426 assertEq(new Table({initial:1.5, element:"anyfunc"}) instanceof Table, true); | 426 assertTrue(new Table({initial: 1.5, element: 'anyfunc'}) instanceof Table); |
| 427 assertEq(new Table({initial:1, maximum:1.5, element:"anyfunc"}) instanceof Table
, true); | 427 assertTrue( |
| 428 //TODO:maximum assertEq(new Table({initial:1, maximum:Math.pow(2,32)-1, element:
"anyfunc"}) instanceof Table, true); | 428 new Table({initial: 1, maximum: 1.5, element: 'anyfunc'}) instanceof Table); |
| 429 // TODO:maximum assertTrue(new Table({initial:1, maximum:Math.pow(2,32)-1, |
| 430 // element:"anyfunc"}) instanceof Table); |
| 429 | 431 |
| 430 // 'WebAssembly.Table.prototype' data property | 432 // 'WebAssembly.Table.prototype' data property |
| 431 let tableProtoDesc = Object.getOwnPropertyDescriptor(Table, 'prototype'); | 433 let tableProtoDesc = Object.getOwnPropertyDescriptor(Table, 'prototype'); |
| 432 assertEq(typeof tableProtoDesc.value, "object"); | 434 assertEq(typeof tableProtoDesc.value, "object"); |
| 433 assertEq(tableProtoDesc.writable, false); | 435 assertFalse(tableProtoDesc.writable); |
| 434 assertEq(tableProtoDesc.enumerable, false); | 436 assertFalse(tableProtoDesc.enumerable); |
| 435 assertEq(tableProtoDesc.configurable, false); | 437 assertFalse(tableProtoDesc.configurable); |
| 436 | 438 |
| 437 // 'WebAssembly.Table.prototype' object | 439 // 'WebAssembly.Table.prototype' object |
| 438 let tableProto = Table.prototype; | 440 let tableProto = Table.prototype; |
| 439 assertEq(tableProto, tableProtoDesc.value); | 441 assertEq(tableProto, tableProtoDesc.value); |
| 440 assertEq(String(tableProto), "[object WebAssembly.Table]"); | 442 assertEq(String(tableProto), "[object WebAssembly.Table]"); |
| 441 assertEq(Object.getPrototypeOf(tableProto), Object.prototype); | 443 assertEq(Object.getPrototypeOf(tableProto), Object.prototype); |
| 442 | 444 |
| 443 // 'WebAssembly.Table' instance objects | 445 // 'WebAssembly.Table' instance objects |
| 444 let tbl1 = new Table({initial:2, element:"anyfunc"}); | 446 let tbl1 = new Table({initial:2, element:"anyfunc"}); |
| 445 assertEq(typeof tbl1, "object"); | 447 assertEq(typeof tbl1, "object"); |
| 446 assertEq(String(tbl1), "[object WebAssembly.Table]"); | 448 assertEq(String(tbl1), "[object WebAssembly.Table]"); |
| 447 assertEq(Object.getPrototypeOf(tbl1), tableProto); | 449 assertEq(Object.getPrototypeOf(tbl1), tableProto); |
| 448 | 450 |
| 449 // 'WebAssembly.Table.prototype.length' accessor data property | 451 // 'WebAssembly.Table.prototype.length' accessor data property |
| 450 let lengthDesc = Object.getOwnPropertyDescriptor(tableProto, 'length'); | 452 let lengthDesc = Object.getOwnPropertyDescriptor(tableProto, 'length'); |
| 451 assertEq(typeof lengthDesc.get, "function"); | 453 assertEq(typeof lengthDesc.get, "function"); |
| 452 assertEq(lengthDesc.set, undefined); | 454 assertEq(lengthDesc.set, undefined); |
| 453 assertEq(lengthDesc.enumerable, false); | 455 assertFalse(lengthDesc.enumerable); |
| 454 assertEq(lengthDesc.configurable, true); | 456 assertTrue(lengthDesc.configurable); |
| 455 | 457 |
| 456 // 'WebAssembly.Table.prototype.length' getter | 458 // 'WebAssembly.Table.prototype.length' getter |
| 457 let lengthGetter = lengthDesc.get; | 459 let lengthGetter = lengthDesc.get; |
| 458 assertEq(lengthGetter.length, 0); | 460 assertEq(lengthGetter.length, 0); |
| 459 assertErrorMessage(() => lengthGetter.call(), TypeError, /called on incompatible
undefined/); | 461 assertErrorMessage(() => lengthGetter.call(), TypeError, /called on incompatible
undefined/); |
| 460 assertErrorMessage(() => lengthGetter.call({}), TypeError, /called on incompatib
le Object/); | 462 assertErrorMessage(() => lengthGetter.call({}), TypeError, /called on incompatib
le Object/); |
| 461 assertEq(typeof lengthGetter.call(tbl1), "number"); | 463 assertEq(typeof lengthGetter.call(tbl1), "number"); |
| 462 assertEq(lengthGetter.call(tbl1), 2); | 464 assertEq(lengthGetter.call(tbl1), 2); |
| 463 | 465 |
| 464 // 'WebAssembly.Table.prototype.get' data property | 466 // 'WebAssembly.Table.prototype.get' data property |
| 465 let getDesc = Object.getOwnPropertyDescriptor(tableProto, 'get'); | 467 let getDesc = Object.getOwnPropertyDescriptor(tableProto, 'get'); |
| 466 assertEq(typeof getDesc.value, "function"); | 468 assertEq(typeof getDesc.value, "function"); |
| 467 assertEq(getDesc.enumerable, false); | 469 assertFalse(getDesc.enumerable); |
| 468 assertEq(getDesc.configurable, true); | 470 assertTrue(getDesc.configurable); |
| 469 | 471 |
| 470 // 'WebAssembly.Table.prototype.get' method | 472 // 'WebAssembly.Table.prototype.get' method |
| 471 let get = getDesc.value; | 473 let get = getDesc.value; |
| 472 assertEq(get.length, 1); | 474 assertEq(get.length, 1); |
| 473 assertErrorMessage(() => get.call(), TypeError, /called on incompatible undefine
d/); | 475 assertErrorMessage(() => get.call(), TypeError, /called on incompatible undefine
d/); |
| 474 assertErrorMessage(() => get.call({}), TypeError, /called on incompatible Object
/); | 476 assertErrorMessage(() => get.call({}), TypeError, /called on incompatible Object
/); |
| 475 assertEq(get.call(tbl1, 0), null); | 477 assertEq(get.call(tbl1, 0), null); |
| 476 assertEq(get.call(tbl1, 1), null); | 478 assertEq(get.call(tbl1, 1), null); |
| 477 assertEq(get.call(tbl1, 1.5), null); | 479 assertEq(get.call(tbl1, 1.5), null); |
| 478 assertErrorMessage(() => get.call(tbl1, 2), RangeError, /bad Table get index/); | 480 assertErrorMessage(() => get.call(tbl1, 2), RangeError, /bad Table get index/); |
| 479 assertErrorMessage(() => get.call(tbl1, 2.5), RangeError, /bad Table get index/)
; | 481 assertErrorMessage(() => get.call(tbl1, 2.5), RangeError, /bad Table get index/)
; |
| 480 assertErrorMessage(() => get.call(tbl1, -1), RangeError, /bad Table get index/); | 482 assertErrorMessage(() => get.call(tbl1, -1), RangeError, /bad Table get index/); |
| 481 //TODO assertErrorMessage(() => get.call(tbl1, Math.pow(2,33)), RangeError, /bad
Table get index/); | 483 //TODO assertErrorMessage(() => get.call(tbl1, Math.pow(2,33)), RangeError, /bad
Table get index/); |
| 482 assertErrorMessage(() => get.call(tbl1, {valueOf() { throw new Error("hi") }}),
Error, "hi"); | 484 assertErrorMessage(() => get.call(tbl1, {valueOf() { throw new Error("hi") }}),
Error, "hi"); |
| 483 | 485 |
| 484 // 'WebAssembly.Table.prototype.set' data property | 486 // 'WebAssembly.Table.prototype.set' data property |
| 485 let setDesc = Object.getOwnPropertyDescriptor(tableProto, 'set'); | 487 let setDesc = Object.getOwnPropertyDescriptor(tableProto, 'set'); |
| 486 assertEq(typeof setDesc.value, "function"); | 488 assertEq(typeof setDesc.value, "function"); |
| 487 assertEq(setDesc.enumerable, false); | 489 assertFalse(setDesc.enumerable); |
| 488 assertEq(setDesc.configurable, true); | 490 assertTrue(setDesc.configurable); |
| 489 | 491 |
| 490 // 'WebAssembly.Table.prototype.set' method | 492 // 'WebAssembly.Table.prototype.set' method |
| 491 let set = setDesc.value; | 493 let set = setDesc.value; |
| 492 assertEq(set.length, 2); | 494 assertEq(set.length, 2); |
| 493 assertErrorMessage(() => set.call(), TypeError, /called on incompatible undefine
d/); | 495 assertErrorMessage(() => set.call(), TypeError, /called on incompatible undefine
d/); |
| 494 assertErrorMessage(() => set.call({}), TypeError, /called on incompatible Object
/); | 496 assertErrorMessage(() => set.call({}), TypeError, /called on incompatible Object
/); |
| 495 assertErrorMessage(() => set.call(tbl1, 0), TypeError, /requires more than 1 arg
ument/); | 497 assertErrorMessage(() => set.call(tbl1, 0), TypeError, /requires more than 1 arg
ument/); |
| 496 assertErrorMessage(() => set.call(tbl1, 2, null), RangeError, /bad Table set ind
ex/); | 498 assertErrorMessage(() => set.call(tbl1, 2, null), RangeError, /bad Table set ind
ex/); |
| 497 assertErrorMessage(() => set.call(tbl1, -1, null), RangeError, /bad Table set in
dex/); | 499 assertErrorMessage(() => set.call(tbl1, -1, null), RangeError, /bad Table set in
dex/); |
| 498 //TODO assertErrorMessage(() => set.call(tbl1, Math.pow(2,33), null), RangeError
, /bad Table set index/); | 500 //TODO assertErrorMessage(() => set.call(tbl1, Math.pow(2,33), null), RangeError
, /bad Table set index/); |
| 499 assertErrorMessage(() => set.call(tbl1, 0, undefined), TypeError, /can only assi
gn WebAssembly exported functions to Table/); | 501 assertErrorMessage(() => set.call(tbl1, 0, undefined), TypeError, /can only assi
gn WebAssembly exported functions to Table/); |
| 500 assertErrorMessage(() => set.call(tbl1, 0, {}), TypeError, /can only assign WebA
ssembly exported functions to Table/); | 502 assertErrorMessage(() => set.call(tbl1, 0, {}), TypeError, /can only assign WebA
ssembly exported functions to Table/); |
| 501 assertErrorMessage(() => set.call(tbl1, 0, function() {}), TypeError, /can only
assign WebAssembly exported functions to Table/); | 503 assertErrorMessage(() => set.call(tbl1, 0, function() {}), TypeError, /can only
assign WebAssembly exported functions to Table/); |
| 502 assertErrorMessage(() => set.call(tbl1, 0, Math.sin), TypeError, /can only assig
n WebAssembly exported functions to Table/); | 504 assertErrorMessage(() => set.call(tbl1, 0, Math.sin), TypeError, /can only assig
n WebAssembly exported functions to Table/); |
| 503 assertErrorMessage(() => set.call(tbl1, {valueOf() { throw Error("hai") }}, null
), Error, "hai"); | 505 assertErrorMessage(() => set.call(tbl1, {valueOf() { throw Error("hai") }}, null
), Error, "hai"); |
| 504 assertEq(set.call(tbl1, 0, null), undefined); | 506 assertEq(set.call(tbl1, 0, null), undefined); |
| 505 assertEq(set.call(tbl1, 1, null), undefined); | 507 assertEq(set.call(tbl1, 1, null), undefined); |
| 506 | 508 |
| 507 // 'WebAssembly.Table.prototype.grow' data property | 509 // 'WebAssembly.Table.prototype.grow' data property |
| 508 let tblGrowDesc = Object.getOwnPropertyDescriptor(tableProto, 'grow'); | 510 let tblGrowDesc = Object.getOwnPropertyDescriptor(tableProto, 'grow'); |
| 509 assertEq(typeof tblGrowDesc.value, "function"); | 511 assertEq(typeof tblGrowDesc.value, "function"); |
| 510 assertEq(tblGrowDesc.enumerable, false); | 512 assertFalse(tblGrowDesc.enumerable); |
| 511 assertEq(tblGrowDesc.configurable, true); | 513 assertTrue(tblGrowDesc.configurable); |
| 512 | 514 |
| 513 // 'WebAssembly.Table.prototype.grow' method | 515 // 'WebAssembly.Table.prototype.grow' method |
| 514 let tblGrow = tblGrowDesc.value; | 516 let tblGrow = tblGrowDesc.value; |
| 515 assertEq(tblGrow.length, 1); | 517 assertEq(tblGrow.length, 1); |
| 516 assertErrorMessage(() => tblGrow.call(), TypeError, /called on incompatible unde
fined/); | 518 assertErrorMessage(() => tblGrow.call(), TypeError, /called on incompatible unde
fined/); |
| 517 assertErrorMessage(() => tblGrow.call({}), TypeError, /called on incompatible Ob
ject/); | 519 assertErrorMessage(() => tblGrow.call({}), TypeError, /called on incompatible Ob
ject/); |
| 518 assertErrorMessage(() => tblGrow.call(tbl1, -1), RangeError, /bad Table grow del
ta/); | 520 assertErrorMessage(() => tblGrow.call(tbl1, -1), RangeError, /bad Table grow del
ta/); |
| 519 assertErrorMessage(() => tblGrow.call(tbl1, Math.pow(2,32)), RangeError, /bad Ta
ble grow delta/); | 521 assertErrorMessage(() => tblGrow.call(tbl1, Math.pow(2,32)), RangeError, /bad Ta
ble grow delta/); |
| 520 var tbl = new Table({element:"anyfunc", initial:1, maximum:2}); | 522 var tbl = new Table({element:"anyfunc", initial:1, maximum:2}); |
| 521 assertEq(tbl.length, 1); | 523 assertEq(tbl.length, 1); |
| 522 assertEq(tbl.grow(0), 1); | 524 assertEq(tbl.grow(0), 1); |
| 523 assertEq(tbl.length, 1); | 525 assertEq(tbl.length, 1); |
| 524 assertEq(tbl.grow(1), 1); | 526 assertEq(tbl.grow(1), 1); |
| 525 assertEq(tbl.length, 2); | 527 assertEq(tbl.length, 2); |
| 526 assertErrorMessage(() => tbl.grow(1), Error, /failed to grow table/); | 528 assertErrorMessage(() => tbl.grow(1), Error, /failed to grow table/); |
| 527 | 529 |
| 528 // 'WebAssembly.validate' function | 530 // 'WebAssembly.validate' function |
| 529 assertErrorMessage(() => WebAssembly.validate(), TypeError); | 531 assertErrorMessage(() => WebAssembly.validate(), TypeError); |
| 530 assertErrorMessage(() => WebAssembly.validate("hi"), TypeError); | 532 assertErrorMessage(() => WebAssembly.validate("hi"), TypeError); |
| 531 assertEq(WebAssembly.validate(emptyModuleBinary), true); | 533 assertTrue(WebAssembly.validate(emptyModuleBinary)); |
| 532 // TODO: other ways for validate to return false. | 534 // TODO: other ways for validate to return false. |
| 533 assertEq(WebAssembly.validate(moduleBinaryImporting2Memories), false); | 535 assertFalse(WebAssembly.validate(moduleBinaryImporting2Memories)); |
| 534 assertEq(WebAssembly.validate(moduleBinaryWithMemSectionAndMemImport), false); | 536 assertFalse(WebAssembly.validate(moduleBinaryWithMemSectionAndMemImport)); |
| 535 | 537 |
| 536 // 'WebAssembly.compile' data property | 538 // 'WebAssembly.compile' data property |
| 537 let compileDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'compile'); | 539 let compileDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'compile'); |
| 538 assertEq(typeof compileDesc.value, "function"); | 540 assertEq(typeof compileDesc.value, "function"); |
| 539 assertEq(compileDesc.writable, true); | 541 assertTrue(compileDesc.writable); |
| 540 assertEq(compileDesc.enumerable, false); | 542 assertFalse(compileDesc.enumerable); |
| 541 assertEq(compileDesc.configurable, true); | 543 assertTrue(compileDesc.configurable); |
| 542 | 544 |
| 543 // 'WebAssembly.compile' function | 545 // 'WebAssembly.compile' function |
| 544 let compile = WebAssembly.compile; | 546 let compile = WebAssembly.compile; |
| 545 assertEq(compile, compileDesc.value); | 547 assertEq(compile, compileDesc.value); |
| 546 assertEq(compile.length, 1); | 548 assertEq(compile.length, 1); |
| 547 assertEq(compile.name, "compile"); | 549 assertEq(compile.name, "compile"); |
| 548 function assertCompileError(args, err, msg) { | 550 function assertCompileError(args, err, msg) { |
| 549 var error = null; | 551 var error = null; |
| 550 compile(...args).catch(e => error = e); | 552 compile(...args).catch(e => error = e); |
| 551 drainJobQueue(); | 553 drainJobQueue(); |
| 552 assertEq(error instanceof err, true); | 554 assertTrue(error instanceof err); |
| 553 assertEq(Boolean(error.stack.match("js-api.js")), true); | 555 assertTrue(Boolean(error.stack.match('js-api.js'))); |
| 554 //TODO assertEq(Boolean(error.message.match(msg)), true); | 556 // TODO assertTrue(Boolean(error.message.match(msg))); |
| 555 } | 557 } |
| 556 assertCompileError([], TypeError, /requires more than 0 arguments/); | 558 assertCompileError([], TypeError, /requires more than 0 arguments/); |
| 557 assertCompileError([undefined], TypeError, /first argument must be an ArrayBuffe
r or typed array object/); | 559 assertCompileError([undefined], TypeError, /first argument must be an ArrayBuffe
r or typed array object/); |
| 558 assertCompileError([1], TypeError, /first argument must be an ArrayBuffer or typ
ed array object/); | 560 assertCompileError([1], TypeError, /first argument must be an ArrayBuffer or typ
ed array object/); |
| 559 assertCompileError([{}], TypeError, /first argument must be an ArrayBuffer or ty
ped array object/); | 561 assertCompileError([{}], TypeError, /first argument must be an ArrayBuffer or ty
ped array object/); |
| 560 assertCompileError([new Uint8Array()], CompileError, /BufferSource argument is e
mpty/); | 562 assertCompileError([new Uint8Array()], CompileError, /BufferSource argument is e
mpty/); |
| 561 assertCompileError([new ArrayBuffer()], CompileError, /BufferSource argument is
empty/); | 563 assertCompileError([new ArrayBuffer()], CompileError, /BufferSource argument is
empty/); |
| 562 assertCompileError([new Uint8Array("hi!")], CompileError, /failed to match magic
number/); | 564 assertCompileError([new Uint8Array("hi!")], CompileError, /failed to match magic
number/); |
| 563 assertCompileError([new ArrayBuffer("hi!")], CompileError, /failed to match magi
c number/); | 565 assertCompileError([new ArrayBuffer("hi!")], CompileError, /failed to match magi
c number/); |
| 564 | 566 |
| 565 function assertCompileSuccess(bytes) { | 567 function assertCompileSuccess(bytes) { |
| 566 var module = null; | 568 var module = null; |
| 567 compile(bytes).then(m => module = m); | 569 compile(bytes).then(m => module = m); |
| 568 drainJobQueue(); | 570 drainJobQueue(); |
| 569 assertEq(module instanceof Module, true); | 571 assertTrue(module instanceof Module); |
| 570 } | 572 } |
| 571 assertCompileSuccess(emptyModuleBinary); | 573 assertCompileSuccess(emptyModuleBinary); |
| 572 assertCompileSuccess(emptyModuleBinary.buffer); | 574 assertCompileSuccess(emptyModuleBinary.buffer); |
| 573 | 575 |
| 574 // 'WebAssembly.instantiate' data property | 576 // 'WebAssembly.instantiate' data property |
| 575 let instantiateDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'instantiate'
); | 577 let instantiateDesc = Object.getOwnPropertyDescriptor(WebAssembly, 'instantiate'
); |
| 576 assertEq(typeof instantiateDesc.value, "function"); | 578 assertEq(typeof instantiateDesc.value, "function"); |
| 577 assertEq(instantiateDesc.writable, true); | 579 assertTrue(instantiateDesc.writable); |
| 578 assertEq(instantiateDesc.enumerable, false); | 580 assertFalse(instantiateDesc.enumerable); |
| 579 assertEq(instantiateDesc.configurable, true); | 581 assertTrue(instantiateDesc.configurable); |
| 580 | 582 |
| 581 // 'WebAssembly.instantiate' function | 583 // 'WebAssembly.instantiate' function |
| 582 let instantiate = WebAssembly.instantiate; | 584 let instantiate = WebAssembly.instantiate; |
| 583 assertEq(instantiate, instantiateDesc.value); | 585 assertEq(instantiate, instantiateDesc.value); |
| 584 assertEq(instantiate.length, 1); | 586 assertEq(instantiate.length, 1); |
| 585 assertEq(instantiate.name, "instantiate"); | 587 assertEq(instantiate.name, "instantiate"); |
| 586 function assertInstantiateError(args, err, msg) { | 588 function assertInstantiateError(args, err, msg) { |
| 587 var error = null; | 589 var error = null; |
| 588 instantiate(...args).catch(e => error = e); | 590 instantiate(...args).catch(e => error = e); |
| 589 drainJobQueue(); | 591 drainJobQueue(); |
| 590 assertEq(error instanceof err, true); | 592 assertTrue(error instanceof err); |
| 591 assertEq(Boolean(error.stack.match("js-api.js")), true); | 593 assertTrue(Boolean(error.stack.match('js-api.js'))); |
| 592 //TODO assertEq(Boolean(error.message.match(msg)), true); | 594 // TODO assertTrue(Boolean(error.message.match(msg))); |
| 593 } | 595 } |
| 594 var scratch_memory = new WebAssembly.Memory(new ArrayBuffer(10)); | 596 var scratch_memory = new WebAssembly.Memory(new ArrayBuffer(10)); |
| 595 assertInstantiateError([], TypeError, /requires more than 0 arguments/); | 597 assertInstantiateError([], TypeError, /requires more than 0 arguments/); |
| 596 assertInstantiateError([undefined], TypeError, /first argument must be a BufferS
ource/); | 598 assertInstantiateError([undefined], TypeError, /first argument must be a BufferS
ource/); |
| 597 assertInstantiateError([1], TypeError, /first argument must be a BufferSource/); | 599 assertInstantiateError([1], TypeError, /first argument must be a BufferSource/); |
| 598 assertInstantiateError([{}], TypeError, /first argument must be a BufferSource/)
; | 600 assertInstantiateError([{}], TypeError, /first argument must be a BufferSource/)
; |
| 599 assertInstantiateError([new Uint8Array()], CompileError, /failed to match magic
number/); | 601 assertInstantiateError([new Uint8Array()], CompileError, /failed to match magic
number/); |
| 600 assertInstantiateError([new ArrayBuffer()], CompileError, /failed to match magic
number/); | 602 assertInstantiateError([new ArrayBuffer()], CompileError, /failed to match magic
number/); |
| 601 assertInstantiateError([new Uint8Array("hi!")], CompileError, /failed to match m
agic number/); | 603 assertInstantiateError([new Uint8Array("hi!")], CompileError, /failed to match m
agic number/); |
| 602 assertInstantiateError([new ArrayBuffer("hi!")], CompileError, /failed to match
magic number/); | 604 assertInstantiateError([new ArrayBuffer("hi!")], CompileError, /failed to match
magic number/); |
| 603 assertInstantiateError([importingModule], TypeError, /second argument must be an
object/); | 605 assertInstantiateError([importingModule], TypeError, /second argument must be an
object/); |
| 604 assertInstantiateError([importingModule, null], TypeError, /second argument must
be an object/); | 606 assertInstantiateError([importingModule, null], TypeError, /second argument must
be an object/); |
| 605 assertInstantiateError([importingModuleBinary, null], TypeError, /second argumen
t must be an object/); | 607 assertInstantiateError([importingModuleBinary, null], TypeError, /second argumen
t must be an object/); |
| 606 assertInstantiateError([emptyModule, null], TypeError, /first argument must be a
BufferSource/); | 608 assertInstantiateError([emptyModule, null], TypeError, /first argument must be a
BufferSource/); |
| 607 assertInstantiateError([importingModule, {"":{f:()=>{}}}], TypeError, /first arg
ument must be a BufferSource/); | |
| 608 assertInstantiateError([importingModuleBinary, null], TypeError, /TODO: error me
ssages?/); | 609 assertInstantiateError([importingModuleBinary, null], TypeError, /TODO: error me
ssages?/); |
| 609 assertInstantiateError([importingModuleBinary, undefined], TypeError, /TODO: err
or messages?/); | 610 assertInstantiateError([importingModuleBinary, undefined], TypeError, /TODO: err
or messages?/); |
| 610 assertInstantiateError([importingModuleBinary, {}], LinkError, /TODO: error mess
ages?/); | 611 assertInstantiateError([importingModuleBinary, {}], LinkError, /TODO: error mess
ages?/); |
| 611 assertInstantiateError([importingModuleBinary, {"":{g:()=>{}}}], LinkError, /TOD
O: error messages?/); | 612 assertInstantiateError([importingModuleBinary, {"":{g:()=>{}}}], LinkError, /TOD
O: error messages?/); |
| 612 assertInstantiateError([importingModuleBinary, {t:{f:()=>{}}}], LinkError, /TODO
: error messages?/); | 613 assertInstantiateError([importingModuleBinary, {t:{f:()=>{}}}], LinkError, /TODO
: error messages?/); |
| 613 assertInstantiateError([memoryImportingModuleBinary, null], TypeError, /TODO: er
ror messages?/); | 614 assertInstantiateError([memoryImportingModuleBinary, null], TypeError, /TODO: er
ror messages?/); |
| 614 assertInstantiateError([memoryImportingModuleBinary, undefined], TypeError, /TOD
O: error messages?/); | 615 assertInstantiateError([memoryImportingModuleBinary, undefined], TypeError, /TOD
O: error messages?/); |
| 615 assertInstantiateError([memoryImportingModuleBinary, {}], LinkError, /TODO: erro
r messages?/); | 616 assertInstantiateError([memoryImportingModuleBinary, {}], LinkError, /TODO: erro
r messages?/); |
| 616 assertInstantiateError([memoryImportingModuleBinary, {"mod": {"my_memory": scrat
ch_memory}}], LinkError, /TODO: error messages?/); | 617 assertInstantiateError([memoryImportingModuleBinary, {"mod": {"my_memory": scrat
ch_memory}}], LinkError, /TODO: error messages?/); |
| 617 assertInstantiateError([memoryImportingModuleBinary, {"": {"memory": scratch_mem
ory}}], LinkError, /TODO: error messages?/); | 618 assertInstantiateError([memoryImportingModuleBinary, {"": {"memory": scratch_mem
ory}}], LinkError, /TODO: error messages?/); |
| 618 | 619 |
| 619 function assertInstantiateSuccess(module_bytes, imports) { | 620 function assertInstantiateSuccess(module_or_bytes, imports) { |
| 620 var result = null; | 621 var result = null; |
| 621 instantiate(module_bytes, imports).then(r => result = r).catch(e => print(e)); | 622 instantiate(module_or_bytes, imports) |
| 623 .then(r => result = r) |
| 624 .catch(e => print(e)); |
| 622 drainJobQueue(); | 625 drainJobQueue(); |
| 623 assertEq(result instanceof Instance, true); | 626 if (module_or_bytes instanceof Module) { |
| 627 assertTrue(result instanceof Instance); |
| 628 } else { |
| 629 assertTrue(result.module instanceof Module); |
| 630 assertTrue(result.instance instanceof Instance); |
| 631 } |
| 624 } | 632 } |
| 633 assertInstantiateSuccess(emptyModule); |
| 625 assertInstantiateSuccess(emptyModuleBinary); | 634 assertInstantiateSuccess(emptyModuleBinary); |
| 626 assertInstantiateSuccess(emptyModuleBinary.buffer); | 635 assertInstantiateSuccess(emptyModuleBinary.buffer); |
| 636 assertInstantiateSuccess(importingModule, {'': {f: () => {}}}); |
| 627 assertInstantiateSuccess(importingModuleBinary, {"":{f:()=>{}}}); | 637 assertInstantiateSuccess(importingModuleBinary, {"":{f:()=>{}}}); |
| 628 assertInstantiateSuccess(importingModuleBinary.buffer, {"":{f:()=>{}}}); | 638 assertInstantiateSuccess(importingModuleBinary.buffer, {"":{f:()=>{}}}); |
| 629 assertInstantiateSuccess(memoryImportingModuleBinary, {"": {"my_memory": scratch
_memory}}); | 639 assertInstantiateSuccess(memoryImportingModuleBinary, {"": {"my_memory": scratch
_memory}}); |
| OLD | NEW |