Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/js/src/jit-test/tests/wasm/spec/spec/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 26 kB image not shown  

Quelle  linking.wast.js   Sprache: JAVA

 
/* Copyright 2021 Mozilla Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


// ./test/core/linking.wast

// ./test/core/linking.wast:3
let $0 = instantiate(`(module $$Mf
  (func (export "call") (result i32) (call $$g))
  (func $$g (result i32) (i32.const 2))
)`);
let $Mf = $0;

// ./test/core/linking.wast:7
register($Mf, `Mf`);

// ./test/core/linking.wast:9
let $1 = instantiate(`(module $$Nf
  (func $$f (import "Mf" "call") (result i32))
  (export "Mf.call" (func $$f))
  (func (export "call Mf.call") (result i32) (call $$f))
  (func (export "call") (result i32) (call $$g))
  (func $$g (result i32) (i32.const 3))
)`);
let $Nf = $1;

// ./test/core/linking.wast:17
assert_return(() => invoke($Mf, `call`, []), [value("i32", 2)]);

// ./test/core/linking.wast:18
assert_return(() => invoke($Nf, `Mf.call`, []), [value("i32", 2)]);

// ./test/core/linking.wast:19
assert_return(() => invoke($Nf, `call`, []), [value("i32", 3)]);

// ./test/core/linking.wast:20
assert_return(() => invoke($Nf, `call Mf.call`, []), [value("i32", 2)]);

// ./test/core/linking.wast:22
let $2 = instantiate(`(module
  (import "spectest" "print_i32" (func $$f (param i32)))
  (export "print" (func $$f))
)`);

// ./test/core/linking.wast:26
register($2, `reexport_f`);

// ./test/core/linking.wast:27
assert_unlinkable(
  () => instantiate(`(module (import "reexport_f" "print" (func (param i64))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:31
assert_unlinkable(
  () => instantiate(`(module (import "reexport_f" "print" (func (param i32) (result i32))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:39
let $3 = instantiate(`(module $$Mg
  (global $$glob (export "glob") i32 (i32.const 42))
  (func (export "get") (result i32) (global.get $$glob))

  ;; export mutable globals
  (global $$mut_glob (export "mut_glob") (mut i32) (i32.const 142))
  (func (export "get_mut") (result i32) (global.get $$mut_glob))
  (func (export "set_mut") (param i32) (global.set $$mut_glob (local.get 0)))
)`);
let $Mg = $3;

// ./test/core/linking.wast:48
register($Mg, `Mg`);

// ./test/core/linking.wast:50
let $4 = instantiate(`(module $$Ng
  (global $$x (import "Mg" "glob") i32)
  (global $$mut_glob (import "Mg" "mut_glob") (mut i32))
  (func $$f (import "Mg" "get") (result i32))
  (func $$get_mut (import "Mg" "get_mut") (result i32))
  (func $$set_mut (import "Mg" "set_mut") (param i32))

  (export "Mg.glob" (global $$x))
  (export "Mg.get" (func $$f))
  (global $$glob (export "glob") i32 (i32.const 43))
  (func (export "get") (result i32) (global.get $$glob))

  (export "Mg.mut_glob" (global $$mut_glob))
  (export "Mg.get_mut" (func $$get_mut))
  (export "Mg.set_mut" (func $$set_mut))
)`);
let $Ng = $4;

// ./test/core/linking.wast:67
assert_return(() => get($Mg, `glob`), [value("i32", 42)]);

// ./test/core/linking.wast:68
assert_return(() => get($Ng, `Mg.glob`), [value("i32", 42)]);

// ./test/core/linking.wast:69
assert_return(() => get($Ng, `glob`), [value("i32", 43)]);

// ./test/core/linking.wast:70
assert_return(() => invoke($Mg, `get`, []), [value("i32", 42)]);

// ./test/core/linking.wast:71
assert_return(() => invoke($Ng, `Mg.get`, []), [value("i32", 42)]);

// ./test/core/linking.wast:72
assert_return(() => invoke($Ng, `get`, []), [value("i32", 43)]);

// ./test/core/linking.wast:74
assert_return(() => get($Mg, `mut_glob`), [value("i32", 142)]);

// ./test/core/linking.wast:75
assert_return(() => get($Ng, `Mg.mut_glob`), [value("i32", 142)]);

// ./test/core/linking.wast:76
assert_return(() => invoke($Mg, `get_mut`, []), [value("i32", 142)]);

// ./test/core/linking.wast:77
assert_return(() => invoke($Ng, `Mg.get_mut`, []), [value("i32", 142)]);

// ./test/core/linking.wast:79
assert_return(() => invoke($Mg, `set_mut`, [241]), []);

// ./test/core/linking.wast:80
assert_return(() => get($Mg, `mut_glob`), [value("i32", 241)]);

// ./test/core/linking.wast:81
assert_return(() => get($Ng, `Mg.mut_glob`), [value("i32", 241)]);

// ./test/core/linking.wast:82
assert_return(() => invoke($Mg, `get_mut`, []), [value("i32", 241)]);

// ./test/core/linking.wast:83
assert_return(() => invoke($Ng, `Mg.get_mut`, []), [value("i32", 241)]);

// ./test/core/linking.wast:86
assert_unlinkable(
  () => instantiate(`(module (import "Mg" "mut_glob" (global i32)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:90
assert_unlinkable(
  () => instantiate(`(module (import "Mg" "glob" (global (mut i32))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:96
let $5 = instantiate(`(module $$Mref_ex
  (type $$t (func))
  (func $$f) (elem declare func $$f)
  (global (export "g-const-funcnull") (ref null func) (ref.null func))
  (global (export "g-const-func") (ref func) (ref.func $$f))
  (global (export "g-const-refnull") (ref null $$t) (ref.null $$t))
  (global (export "g-const-ref") (ref $$t) (ref.func $$f))
  (global (export "g-const-extern") externref (ref.null extern))
  (global (export "g-var-funcnull") (mut (ref null func)) (ref.null func))
  (global (export "g-var-func") (mut (ref func)) (ref.func $$f))
  (global (export "g-var-refnull") (mut (ref null $$t)) (ref.null $$t))
  (global (export "g-var-ref") (mut (ref $$t)) (ref.func $$f))
  (global (export "g-var-extern") (mut externref) (ref.null extern))
)`);
let $Mref_ex = $5;

// ./test/core/linking.wast:110
register($Mref_ex, `Mref_ex`);

// ./test/core/linking.wast:112
let $6 = instantiate(`(module $$Mref_im
  (type $$t (func))
  (global (import "Mref_ex" "g-const-funcnull") (ref null func))
  (global (import "Mref_ex" "g-const-func") (ref null func))
  (global (import "Mref_ex" "g-const-refnull") (ref null func))
  (global (import "Mref_ex" "g-const-ref") (ref null func))
  (global (import "Mref_ex" "g-const-func") (ref func))
  (global (import "Mref_ex" "g-const-ref") (ref func))
  (global (import "Mref_ex" "g-const-refnull") (ref null $$t))
  (global (import "Mref_ex" "g-const-ref") (ref null $$t))
  (global (import "Mref_ex" "g-const-ref") (ref $$t))
  (global (import "Mref_ex" "g-const-extern") externref)

  (global (import "Mref_ex" "g-var-funcnull") (mut (ref null func)))
  (global (import "Mref_ex" "g-var-func") (mut (ref func)))
  (global (import "Mref_ex" "g-var-refnull") (mut (ref null $$t)))
  (global (import "Mref_ex" "g-var-ref") (mut (ref $$t)))
  (global (import "Mref_ex" "g-var-extern") (mut externref))
)`);
let $Mref_im = $6;

// ./test/core/linking.wast:132
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-const-extern") (ref null func)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:137
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-const-funcnull"(ref func)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:141
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-const-refnull") (ref func)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:145
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-const-extern") (ref func)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:150
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-const-funcnull"(ref null $$t)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:154
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-const-func") (ref null $$t)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:158
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-const-extern") (ref null $$t)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:163
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-const-funcnull"(ref $$t)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:167
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-const-func") (ref $$t)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:171
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-const-refnull") (ref $$t)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:175
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-const-extern") (ref $$t)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:181
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-func") (mut (ref null func))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:185
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-refnull") (mut (ref null func))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:189
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-ref") (mut (ref null func))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:193
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-extern") (mut (ref null func))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:198
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-funcnull") (mut (ref func))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:202
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-refnull") (mut (ref func))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:206
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-ref") (mut (ref func))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:210
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-extern") (mut (ref func))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:215
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-var-funcnull") (mut (ref null $$t))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:219
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-var-func") (mut (ref null $$t))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:223
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-var-ref") (mut (renull $$t))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:227
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-var-extern") (mut (ref null $$t))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:232
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-var-funcnull") (mut (ref $$t))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:236
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-var-func") (mut (ref $$t))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:240
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-var-refnull") (mut (ref $$t))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:244
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (global (import "Mref_ex" "g-var-extern") (mut (ref $$t))))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:249
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-funcnull") (mut externref)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:253
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-func") (mut externref)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:257
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-refnull") (mut externref)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:261
assert_unlinkable(
  () => instantiate(`(module (global (import "Mref_ex" "g-var-ref") (mut externref)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:269
let $7 = instantiate(`(module $$Mt
  (type (func (result i32)))
  (type (func))

  (table (export "tab") 10 funcref)
  (elem (i32.const 2) $$g $$g $$g $$g)
  (func $$g (result i32) (i32.const 4))
  (func (export "h") (result i32) (i32.const -4))

  (func (export "call") (param i32) (result i32)
    (call_indirect (type 0) (local.get 0))
  )
)`);
let $Mt = $7;

// ./test/core/linking.wast:282
register($Mt, `Mt`);

// ./test/core/linking.wast:284
let $8 = instantiate(`(module $$Nt
  (type (func))
  (type (func (result i32)))

  (func $$f (import "Mt" "call") (param i32) (result i32))
  (func $$h (import "Mt" "h") (result i32))

  (table funcref (elem $$g $$g $$g $$h $$f))
  (func $$g (result i32) (i32.const 5))

  (export "Mt.call" (func $$f))
  (func (export "call Mt.call") (param i32) (result i32)
    (call $$f (local.get 0))
  )
  (func (export "call") (param i32) (result i32)
    (call_indirect (type 1) (local.get 0))
  )
)`);
let $Nt = $8;

// ./test/core/linking.wast:303
assert_return(() => invoke($Mt, `call`, [2]), [value("i32", 4)]);

// ./test/core/linking.wast:304
assert_return(() => invoke($Nt, `Mt.call`, [2]), [value("i32", 4)]);

// ./test/core/linking.wast:305
assert_return(() => invoke($Nt, `call`, [2]), [value("i32", 5)]);

// ./test/core/linking.wast:306
assert_return(() => invoke($Nt, `call Mt.call`, [2]), [value("i32", 4)]);

// ./test/core/linking.wast:308
assert_trap(() => invoke($Mt, `call`, [1]), `uninitialized element`);

// ./test/core/linking.wast:309
assert_trap(() => invoke($Nt, `Mt.call`, [1]), `uninitialized element`);

// ./test/core/linking.wast:310
assert_return(() => invoke($Nt, `call`, [1]), [value("i32", 5)]);

// ./test/core/linking.wast:311
assert_trap(() => invoke($Nt, `call Mt.call`, [1]), `uninitialized element`);

// ./test/core/linking.wast:313
assert_trap(() => invoke($Mt, `call`, [0]), `uninitialized element`);

// ./test/core/linking.wast:314
assert_trap(() => invoke($Nt, `Mt.call`, [0]), `uninitialized element`);

// ./test/core/linking.wast:315
assert_return(() => invoke($Nt, `call`, [0]), [value("i32", 5)]);

// ./test/core/linking.wast:316
assert_trap(() => invoke($Nt, `call Mt.call`, [0]), `uninitialized element`);

// ./test/core/linking.wast:318
assert_trap(() => invoke($Mt, `call`, [20]), `undefined element`);

// ./test/core/linking.wast:319
assert_trap(() => invoke($Nt, `Mt.call`, [20]), `undefined element`);

// ./test/core/linking.wast:320
assert_trap(() => invoke($Nt, `call`, [7]), `undefined element`);

// ./test/core/linking.wast:321
assert_trap(() => invoke($Nt, `call Mt.call`, [20]), `undefined element`);

// ./test/core/linking.wast:323
assert_return(() => invoke($Nt, `call`, [3]), [value("i32", -4)]);

// ./test/core/linking.wast:324
assert_trap(() => invoke($Nt, `call`, [4]), `indirect call type mismatch`);

// ./test/core/linking.wast:326
let $9 = instantiate(`(module $$Ot
  (type (func (result i32)))

  (func $$h (import "Mt" "h") (result i32))
  (table (import "Mt" "tab") 5 funcref)
  (elem (i32.const 1) $$i $$h)
  (func $$i (result i32) (i32.const 6))

  (func (export "call") (param i32) (result i32)
    (call_indirect (type 0) (local.get 0))
  )
)`);
let $Ot = $9;

// ./test/core/linking.wast:339
assert_return(() => invoke($Mt, `call`, [3]), [value("i32", 4)]);

// ./test/core/linking.wast:340
assert_return(() => invoke($Nt, `Mt.call`, [3]), [value("i32", 4)]);

// ./test/core/linking.wast:341
assert_return(() => invoke($Nt, `call Mt.call`, [3]), [value("i32", 4)]);

// ./test/core/linking.wast:342
assert_return(() => invoke($Ot, `call`, [3]), [value("i32", 4)]);

// ./test/core/linking.wast:344
assert_return(() => invoke($Mt, `call`, [2]), [value("i32", -4)]);

// ./test/core/linking.wast:345
assert_return(() => invoke($Nt, `Mt.call`, [2]), [value("i32", -4)]);

// ./test/core/linking.wast:346
assert_return(() => invoke($Nt, `call`, [2]), [value("i32", 5)]);

// ./test/core/linking.wast:347
assert_return(() => invoke($Nt, `call Mt.call`, [2]), [value("i32", -4)]);

// ./test/core/linking.wast:348
assert_return(() => invoke($Ot, `call`, [2]), [value("i32", -4)]);

// ./test/core/linking.wast:350
assert_return(() => invoke($Mt, `call`, [1]), [value("i32", 6)]);

// ./test/core/linking.wast:351
assert_return(() => invoke($Nt, `Mt.call`, [1]), [value("i32", 6)]);

// ./test/core/linking.wast:352
assert_return(() => invoke($Nt, `call`, [1]), [value("i32", 5)]);

// ./test/core/linking.wast:353
assert_return(() => invoke($Nt, `call Mt.call`, [1]), [value("i32", 6)]);

// ./test/core/linking.wast:354
assert_return(() => invoke($Ot, `call`, [1]), [value("i32", 6)]);

// ./test/core/linking.wast:356
assert_trap(() => invoke($Mt, `call`, [0]), `uninitialized element`);

// ./test/core/linking.wast:357
assert_trap(() => invoke($Nt, `Mt.call`, [0]), `uninitialized element`);

// ./test/core/linking.wast:358
assert_return(() => invoke($Nt, `call`, [0]), [value("i32", 5)]);

// ./test/core/linking.wast:359
assert_trap(() => invoke($Nt, `call Mt.call`, [0]), `uninitialized element`);

// ./test/core/linking.wast:360
assert_trap(() => invoke($Ot, `call`, [0]), `uninitialized element`);

// ./test/core/linking.wast:362
assert_trap(() => invoke($Ot, `call`, [20]), `undefined element`);

// ./test/core/linking.wast:364
let $10 = instantiate(`(module
  (table (import "Mt" "tab") 0 funcref)
  (elem (i32.const 9) $$f)
  (func $$f)
)`);

// ./test/core/linking.wast:370
let $11 = instantiate(`(module $$G1 (global (export "g") i32 (i32.const 5)))`);
let $G1 = $11;

// ./test/core/linking.wast:371
register($G1, `G1`);

// ./test/core/linking.wast:372
let $12 = instantiate(`(module $$G2
  (global (import "G1" "g") i32)
  (global (export "g") i32 (global.get 0))
)`);
let $G2 = $12;

// ./test/core/linking.wast:376
assert_return(() => get($G2, `g`), [value("i32", 5)]);

// ./test/core/linking.wast:378
assert_trap(
  () => instantiate(`(module
    (table (import "Mt" "tab") 0 funcref)
    (elem (i32.const 10) $$f)
    (func $$f)
  )`),
  `out of bounds table access`,
);

// ./test/core/linking.wast:387
assert_unlinkable(
  () => instantiate(`(module
    (table (import "Mt" "tab") 10 funcref)
    (memory (import "Mt" "mem") 1)  ;; does not exist
    (func $$f (result i32) (i32.const 0))
    (elem (i32.const 7) $$f)
    (elem (i32.const 9) $$f)
  )`),
  `unknown import`,
);

// ./test/core/linking.wast:397
assert_trap(() => invoke($Mt, `call`, [7]), `uninitialized element`);

// ./test/core/linking.wast:401
assert_trap(
  () => instantiate(`(module
    (table (import "Mt" "tab") 10 funcref)
    (func $$f (result i32) (i32.const 0))
    (elem (i32.const 7) $$f)
    (elem (i32.const 8) $$f $$f $$f $$f $$f)  ;; (partially) out of bounds
  )`),
  `out of bounds table access`,
);

// ./test/core/linking.wast:410
assert_return(() => invoke($Mt, `call`, [7]), [value("i32", 0)]);

// ./test/core/linking.wast:411
assert_trap(() => invoke($Mt, `call`, [8]), `uninitialized element`);

// ./test/core/linking.wast:413
assert_trap(
  () => instantiate(`(module
    (table (import "Mt" "tab") 10 funcref)
    (func $$f (result i32) (i32.const 0))
    (elem (i32.const 7) $$f)
    (memory 1)
    (data (i32.const 0x10000) "d")  ;; out of bounds
  )`),
  `out of bounds memory access`,
);

// ./test/core/linking.wast:423
assert_return(() => invoke($Mt, `call`, [7]), [value("i32", 0)]);

// ./test/core/linking.wast:426
let $13 = instantiate(`(module $$Mtable_ex
  (type $$t (func))
  (table (export "t-funcnull") 1 (ref null func))
  (table (export "t-refnull") 1 (ref null $$t))
  (table (export "t-extern") 1 externref)
)`);
let $Mtable_ex = $13;

// ./test/core/linking.wast:432
register($Mtable_ex, `Mtable_ex`);

// ./test/core/linking.wast:434
let $14 = instantiate(`(module
  (type $$t (func))
  (table (import "Mtable_ex" "t-funcnull") 1 (ref null func))
  (table (import "Mtable_ex" "t-refnull") 1 (ref null $$t))
  (table (import "Mtable_ex" "t-extern") 1 externref)
)`);

// ./test/core/linking.wast:441
assert_unlinkable(
  () => instantiate(`(module (table (import "Mtable_ex" "t-refnull") 1 (ref null func)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:445
assert_unlinkable(
  () => instantiate(`(module (table (import "Mtable_ex" "t-extern") 1 (ref null func)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:450
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (table (import "Mtable_ex" "t-funcnull") 1 (ref null $$t)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:454
assert_unlinkable(
  () => instantiate(`(module (type $$t (func)) (table (import "Mtable_ex" "t-extern") 1 (ref null $$t)))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:459
assert_unlinkable(
  () => instantiate(`(module (table (import "Mtable_ex" "t-funcnull") 1 externref))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:463
assert_unlinkable(
  () => instantiate(`(module (table (import "Mtable_ex" "t-refnull") 1 externref))`),
  `incompatible import type`,
);

// ./test/core/linking.wast:471
let $15 = instantiate(`(module $$Mm
  (memory (export "mem") 1 5)
  (data (i32.const 10) "\\00\\01\\02\\03\\04\\05\\06\\07\\08\\09")

  (func (export "load") (param $$a i32) (result i32)
    (i32.load8_u (local.get 0))
  )
)`);
let $Mm = $15;

// ./test/core/linking.wast:479
register($Mm, `Mm`);

// ./test/core/linking.wast:481
let $16 = instantiate(`(module $$Nm
  (func $$loadM (import "Mm" "load") (param i32) (result i32))

  (memory 1)
  (data (i32.const 10) "\\f0\\f1\\f2\\f3\\f4\\f5")

  (export "Mm.load" (func $$loadM))
  (func (export "load") (param $$a i32) (result i32)
    (i32.load8_u (local.get 0))
  )
)`);
let $Nm = $16;

// ./test/core/linking.wast:493
assert_return(() => invoke($Mm, `load`, [12]), [value("i32", 2)]);

// ./test/core/linking.wast:494
assert_return(() => invoke($Nm, `Mm.load`, [12]), [value("i32", 2)]);

// ./test/core/linking.wast:495
assert_return(() => invoke($Nm, `load`, [12]), [value("i32", 242)]);

// ./test/core/linking.wast:497
let $17 = instantiate(`(module $$Om
  (memory (import "Mm" "mem") 1)
  (data (i32.const 5) "\\a0\\a1\\a2\\a3\\a4\\a5\\a6\\a7")

  (func (export "load") (param $$a i32) (result i32)
    (i32.load8_u (local.get 0))
  )
)`);
let $Om = $17;

// ./test/core/linking.wast:506
assert_return(() => invoke($Mm, `load`, [12]), [value("i32", 167)]);

// ./test/core/linking.wast:507
assert_return(() => invoke($Nm, `Mm.load`, [12]), [value("i32", 167)]);

// ./test/core/linking.wast:508
assert_return(() => invoke($Nm, `load`, [12]), [value("i32", 242)]);

// ./test/core/linking.wast:509
assert_return(() => invoke($Om, `load`, [12]), [value("i32", 167)]);

// ./test/core/linking.wast:511
let $18 = instantiate(`(module
  (memory (import "Mm" "mem") 0)
  (data (i32.const 0xffff) "a")
)`);

// ./test/core/linking.wast:516
assert_trap(
  () => instantiate(`(module
    (memory (import "Mm" "mem") 0)
    (data (i32.const 0x10000) "a")
  )`),
  `out of bounds memory access`,
);

// ./test/core/linking.wast:524
let $19 = instantiate(`(module $$Pm
  (memory (import "Mm" "mem") 1 8)

  (func (export "grow") (param $$a i32) (result i32)
    (memory.grow (local.get 0))
  )
)`);
let $Pm = $19;

// ./test/core/linking.wast:532
assert_return(() => invoke($Pm, `grow`, [0]), [value("i32", 1)]);

// ./test/core/linking.wast:533
assert_return(() => invoke($Pm, `grow`, [2]), [value("i32", 1)]);

// ./test/core/linking.wast:534
assert_return(() => invoke($Pm, `grow`, [0]), [value("i32", 3)]);

// ./test/core/linking.wast:535
assert_return(() => invoke($Pm, `grow`, [1]), [value("i32", 3)]);

// ./test/core/linking.wast:536
assert_return(() => invoke($Pm, `grow`, [1]), [value("i32", 4)]);

// ./test/core/linking.wast:537
assert_return(() => invoke($Pm, `grow`, [0]), [value("i32", 5)]);

// ./test/core/linking.wast:538
assert_return(() => invoke($Pm, `grow`, [1]), [value("i32", -1)]);

// ./test/core/linking.wast:539
assert_return(() => invoke($Pm, `grow`, [0]), [value("i32", 5)]);

// ./test/core/linking.wast:541
assert_unlinkable(
  () => instantiate(`(module
    (func $$host (import "spectest" "print"))
    (memory (import "Mm" "mem") 1)
    (table (import "Mm" "tab") 0 funcref)  ;; does not exist
    (data (i32.const 0) "abc")
  )`),
  `unknown import`,
);

// ./test/core/linking.wast:550
assert_return(() => invoke($Mm, `load`, [0]), [value("i32", 0)]);

// ./test/core/linking.wast:554
assert_trap(
  () => instantiate(`(module
    ;; Note: the memory is 5 pages large by the time we get here.
    (memory (import "Mm" "mem") 1)
    (data (i32.const 0) "abc")
    (data (i32.const 327670) "zzzzzzzzzzzzzzzzzz") ;; (partially) out of bounds
  )`),
  `out of bounds memory access`,
);

// ./test/core/linking.wast:563
assert_return(() => invoke($Mm, `load`, [0]), [value("i32", 97)]);

// ./test/core/linking.wast:564
assert_return(() => invoke($Mm, `load`, [327670]), [value("i32", 0)]);

// ./test/core/linking.wast:566
assert_trap(
  () => instantiate(`(module
    (memory (import "Mm" "mem") 1)
    (data (i32.const 0) "abc")
    (table 0 funcref)
    (func)
    (elem (i32.const 0) 0)  ;; out of bounds
  )`),
  `out of bounds table access`,
);

// ./test/core/linking.wast:576
assert_return(() => invoke($Mm, `load`, [0]), [value("i32", 97)]);

// ./test/core/linking.wast:579
let $20 = instantiate(`(module $$Ms
  (type $$t (func (result i32)))
  (memory (export "memory") 1)
  (table (export "table") 1 funcref)
  (func (export "get memory[0]") (type $$t)
    (i32.load8_u (i32.const 0))
  )
  (func (export "get table[0]") (type $$t)
    (call_indirect (type $$t) (i32.const 0))
  )
)`);
let $Ms = $20;

// ./test/core/linking.wast:590
register($Ms, `Ms`);

// ./test/core/linking.wast:592
assert_trap(
  () => instantiate(`(module
    (import "Ms" "memory" (memory 1))
    (import "Ms" "table" (table 1 funcref))
    (data (i32.const 0) "hello")
    (elem (i32.const 0) $$f)
    (func $$f (result i32)
      (i32.const 0xdead)
    )
    (func $$main
      (unreachable)
    )
    (start $$main)
  )`),
  `unreachable`,
);

// ./test/core/linking.wast:609
assert_return(() => invoke($Ms, `get memory[0]`, []), [value("i32", 104)]);

// ./test/core/linking.wast:610
assert_return(() => invoke($Ms, `get table[0]`, []), [value("i32", 57005)]);

Messung V0.5
C=82 H=100 G=91

¤ Dauer der Verarbeitung: 0.8 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.