tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

casts.tentative.any.js (15571B)


      1 // META: global=window,dedicatedworker,jsshell
      2 // META: script=/wasm/jsapi/wasm-module-builder.js
      3 
      4 let exports = {};
      5 setup(() => {
      6  const builder = new WasmModuleBuilder();
      7  const structIndex = builder.addStruct([makeField(kWasmI32, true)]);
      8  const arrayIndex = builder.addArray(kWasmI32, true);
      9  const structIndex2 = builder.addStruct([makeField(kWasmF32, true)]);
     10  const arrayIndex2 = builder.addArray(kWasmF32, true);
     11  const funcIndex = builder.addType({ params: [], results: [] });
     12  const funcIndex2 = builder.addType({ params: [], results: [kWasmI32] });
     13 
     14  const argFunctions = [
     15    { name: "any", code: kWasmAnyRef },
     16    { name: "eq", code: kWasmEqRef },
     17    { name: "struct", code: kWasmStructRef },
     18    { name: "array", code: kWasmArrayRef },
     19    { name: "i31", code: kWasmI31Ref },
     20    { name: "func", code: kWasmFuncRef },
     21    { name: "extern", code: kWasmExternRef },
     22    { name: "none", code: kWasmNullRef },
     23    { name: "nofunc", code: kWasmNullFuncRef },
     24    { name: "noextern", code: kWasmNullExternRef },
     25    { name: "concreteStruct", code: structIndex },
     26    { name: "concreteArray", code: arrayIndex },
     27    { name: "concreteFunc", code: funcIndex },
     28  ];
     29 
     30  for (const desc of argFunctions) {
     31    builder
     32      .addFunction(desc.name + "Arg", makeSig_v_x(wasmRefType(desc.code)))
     33      .addBody([])
     34      .exportFunc();
     35 
     36    builder
     37      .addFunction(desc.name + "NullableArg", makeSig_v_x(wasmRefNullType(desc.code)))
     38      .addBody([])
     39      .exportFunc();
     40  }
     41 
     42  builder
     43    .addFunction("makeStruct", makeSig_r_v(wasmRefType(structIndex)))
     44    .addBody([...wasmI32Const(42),
     45              ...GCInstr(kExprStructNew), structIndex])
     46    .exportFunc();
     47 
     48  builder
     49    .addFunction("makeArray", makeSig_r_v(wasmRefType(arrayIndex)))
     50    .addBody([...wasmI32Const(5), ...wasmI32Const(42),
     51              ...GCInstr(kExprArrayNew), arrayIndex])
     52    .exportFunc();
     53 
     54  builder
     55    .addFunction("makeStruct2", makeSig_r_v(wasmRefType(structIndex2)))
     56    .addBody([...wasmF32Const(42),
     57              ...GCInstr(kExprStructNew), structIndex2])
     58    .exportFunc();
     59 
     60  builder
     61    .addFunction("makeArray2", makeSig_r_v(wasmRefType(arrayIndex2)))
     62    .addBody([...wasmF32Const(42), ...wasmI32Const(5),
     63              ...GCInstr(kExprArrayNew), arrayIndex2])
     64    .exportFunc();
     65 
     66  builder
     67    .addFunction("testFunc", funcIndex)
     68    .addBody([])
     69    .exportFunc();
     70 
     71  builder
     72    .addFunction("testFunc2", funcIndex2)
     73    .addBody([...wasmI32Const(42)])
     74    .exportFunc();
     75 
     76  const buffer = builder.toBuffer();
     77  const module = new WebAssembly.Module(buffer);
     78  const instance = new WebAssembly.Instance(module, {});
     79  exports = instance.exports;
     80 });
     81 
     82 test(() => {
     83  exports.anyArg(exports.makeStruct());
     84  exports.anyArg(exports.makeArray());
     85  exports.anyArg(42);
     86  exports.anyArg(42n);
     87  exports.anyArg("foo");
     88  exports.anyArg({});
     89  exports.anyArg(() => {});
     90  exports.anyArg(exports.testFunc);
     91  assert_throws_js(TypeError, () => exports.anyArg(null));
     92 
     93  exports.anyNullableArg(null);
     94  exports.anyNullableArg(exports.makeStruct());
     95  exports.anyNullableArg(exports.makeArray());
     96  exports.anyNullableArg(42);
     97  exports.anyNullableArg(42n);
     98  exports.anyNullableArg("foo");
     99  exports.anyNullableArg({});
    100  exports.anyNullableArg(() => {});
    101  exports.anyNullableArg(exports.testFunc);
    102 }, "anyref casts");
    103 
    104 test(() => {
    105  exports.eqArg(exports.makeStruct());
    106  exports.eqArg(exports.makeArray());
    107  exports.eqArg(42);
    108  assert_throws_js(TypeError, () => exports.eqArg(42n));
    109  assert_throws_js(TypeError, () => exports.eqArg("foo"));
    110  assert_throws_js(TypeError, () => exports.eqArg({}));
    111  assert_throws_js(TypeError, () => exports.eqArg(exports.testFunc));
    112  assert_throws_js(TypeError, () => exports.eqArg(() => {}));
    113  assert_throws_js(TypeError, () => exports.eqArg(null));
    114 
    115  exports.eqNullableArg(null);
    116  exports.eqNullableArg(exports.makeStruct());
    117  exports.eqNullableArg(exports.makeArray());
    118  exports.eqNullableArg(42);
    119  assert_throws_js(TypeError, () => exports.eqNullableArg(42n));
    120  assert_throws_js(TypeError, () => exports.eqNullableArg("foo"));
    121  assert_throws_js(TypeError, () => exports.eqNullableArg({}));
    122  assert_throws_js(TypeError, () => exports.eqNullableArg(exports.testFunc));
    123  assert_throws_js(TypeError, () => exports.eqNullableArg(() => {}));
    124 }, "eqref casts");
    125 
    126 test(() => {
    127  exports.structArg(exports.makeStruct());
    128  assert_throws_js(TypeError, () => exports.structArg(exports.makeArray()));
    129  assert_throws_js(TypeError, () => exports.structArg(42));
    130  assert_throws_js(TypeError, () => exports.structArg(42n));
    131  assert_throws_js(TypeError, () => exports.structArg("foo"));
    132  assert_throws_js(TypeError, () => exports.structArg({}));
    133  assert_throws_js(TypeError, () => exports.structArg(exports.testFunc));
    134  assert_throws_js(TypeError, () => exports.structArg(() => {}));
    135  assert_throws_js(TypeError, () => exports.structArg(null));
    136 
    137  exports.structNullableArg(null);
    138  exports.structNullableArg(exports.makeStruct());
    139  assert_throws_js(TypeError, () => exports.structNullableArg(exports.makeArray()));
    140  assert_throws_js(TypeError, () => exports.structNullableArg(42));
    141  assert_throws_js(TypeError, () => exports.structNullableArg(42n));
    142  assert_throws_js(TypeError, () => exports.structNullableArg("foo"));
    143  assert_throws_js(TypeError, () => exports.structNullableArg({}));
    144  assert_throws_js(TypeError, () => exports.structNullableArg(exports.testFunc));
    145  assert_throws_js(TypeError, () => exports.structNullableArg(() => {}));
    146 }, "structref casts");
    147 
    148 test(() => {
    149  exports.arrayArg(exports.makeArray());
    150  assert_throws_js(TypeError, () => exports.arrayArg(exports.makeStruct()));
    151  assert_throws_js(TypeError, () => exports.arrayArg(42));
    152  assert_throws_js(TypeError, () => exports.arrayArg(42n));
    153  assert_throws_js(TypeError, () => exports.arrayArg("foo"));
    154  assert_throws_js(TypeError, () => exports.arrayArg({}));
    155  assert_throws_js(TypeError, () => exports.arrayArg(exports.testFunc));
    156  assert_throws_js(TypeError, () => exports.arrayArg(() => {}));
    157  assert_throws_js(TypeError, () => exports.arrayArg(null));
    158 
    159  exports.arrayNullableArg(null);
    160  exports.arrayNullableArg(exports.makeArray());
    161  assert_throws_js(TypeError, () => exports.arrayNullableArg(exports.makeStruct()));
    162  assert_throws_js(TypeError, () => exports.arrayNullableArg(42));
    163  assert_throws_js(TypeError, () => exports.arrayNullableArg(42n));
    164  assert_throws_js(TypeError, () => exports.arrayNullableArg("foo"));
    165  assert_throws_js(TypeError, () => exports.arrayNullableArg({}));
    166  assert_throws_js(TypeError, () => exports.arrayNullableArg(exports.testFunc));
    167  assert_throws_js(TypeError, () => exports.arrayNullableArg(() => {}));
    168 }, "arrayref casts");
    169 
    170 test(() => {
    171  exports.i31Arg(42);
    172  assert_throws_js(TypeError, () => exports.i31Arg(exports.makeStruct()));
    173  assert_throws_js(TypeError, () => exports.i31Arg(exports.makeArray()));
    174  assert_throws_js(TypeError, () => exports.i31Arg(42n));
    175  assert_throws_js(TypeError, () => exports.i31Arg("foo"));
    176  assert_throws_js(TypeError, () => exports.i31Arg({}));
    177  assert_throws_js(TypeError, () => exports.i31Arg(exports.testFunc));
    178  assert_throws_js(TypeError, () => exports.i31Arg(() => {}));
    179  assert_throws_js(TypeError, () => exports.i31Arg(null));
    180 
    181  exports.i31NullableArg(null);
    182  exports.i31NullableArg(42);
    183  assert_throws_js(TypeError, () => exports.i31NullableArg(exports.makeStruct()));
    184  assert_throws_js(TypeError, () => exports.i31NullableArg(exports.makeArray()));
    185  assert_throws_js(TypeError, () => exports.i31NullableArg(42n));
    186  assert_throws_js(TypeError, () => exports.i31NullableArg("foo"));
    187  assert_throws_js(TypeError, () => exports.i31NullableArg({}));
    188  assert_throws_js(TypeError, () => exports.i31NullableArg(exports.testFunc));
    189  assert_throws_js(TypeError, () => exports.i31NullableArg(() => {}));
    190 }, "i31ref casts");
    191 
    192 test(() => {
    193  exports.funcArg(exports.testFunc);
    194  assert_throws_js(TypeError, () => exports.funcArg(exports.makeStruct()));
    195  assert_throws_js(TypeError, () => exports.funcArg(exports.makeArray()));
    196  assert_throws_js(TypeError, () => exports.funcArg(42));
    197  assert_throws_js(TypeError, () => exports.funcArg(42n));
    198  assert_throws_js(TypeError, () => exports.funcArg("foo"));
    199  assert_throws_js(TypeError, () => exports.funcArg({}));
    200  assert_throws_js(TypeError, () => exports.funcArg(() => {}));
    201  assert_throws_js(TypeError, () => exports.funcArg(null));
    202 
    203  exports.funcNullableArg(null);
    204  exports.funcNullableArg(exports.testFunc);
    205  assert_throws_js(TypeError, () => exports.funcNullableArg(exports.makeStruct()));
    206  assert_throws_js(TypeError, () => exports.funcNullableArg(exports.makeArray()));
    207  assert_throws_js(TypeError, () => exports.funcNullableArg(42));
    208  assert_throws_js(TypeError, () => exports.funcNullableArg(42n));
    209  assert_throws_js(TypeError, () => exports.funcNullableArg("foo"));
    210  assert_throws_js(TypeError, () => exports.funcNullableArg({}));
    211  assert_throws_js(TypeError, () => exports.funcNullableArg(() => {}));
    212 }, "funcref casts");
    213 
    214 test(() => {
    215  exports.externArg(exports.makeArray());
    216  exports.externArg(exports.makeStruct());
    217  exports.externArg(42);
    218  exports.externArg(42n);
    219  exports.externArg("foo");
    220  exports.externArg({});
    221  exports.externArg(exports.testFunc);
    222  exports.externArg(() => {});
    223  assert_throws_js(TypeError, () => exports.externArg(null));
    224 
    225  exports.externNullableArg(null);
    226  exports.externNullableArg(exports.makeArray());
    227  exports.externNullableArg(exports.makeStruct());
    228  exports.externNullableArg(42);
    229  exports.externNullableArg(42n);
    230  exports.externNullableArg("foo");
    231  exports.externNullableArg({});
    232  exports.externNullableArg(exports.testFunc);
    233  exports.externNullableArg(() => {});
    234 }, "externref casts");
    235 
    236 test(() => {
    237  for (const nullfunc of [exports.noneArg, exports.nofuncArg, exports.noexternArg]) {
    238    assert_throws_js(TypeError, () => nullfunc(exports.makeStruct()));
    239    assert_throws_js(TypeError, () => nullfunc(exports.makeArray()));
    240    assert_throws_js(TypeError, () => nullfunc(42));
    241    assert_throws_js(TypeError, () => nullfunc(42n));
    242    assert_throws_js(TypeError, () => nullfunc("foo"));
    243    assert_throws_js(TypeError, () => nullfunc({}));
    244    assert_throws_js(TypeError, () => nullfunc(exports.testFunc));
    245    assert_throws_js(TypeError, () => nullfunc(() => {}));
    246    assert_throws_js(TypeError, () => nullfunc(null));
    247  }
    248 
    249  for (const nullfunc of [exports.noneNullableArg, exports.nofuncNullableArg, exports.noexternNullableArg]) {
    250    nullfunc(null);
    251    assert_throws_js(TypeError, () => nullfunc(exports.makeStruct()));
    252    assert_throws_js(TypeError, () => nullfunc(exports.makeArray()));
    253    assert_throws_js(TypeError, () => nullfunc(42));
    254    assert_throws_js(TypeError, () => nullfunc(42n));
    255    assert_throws_js(TypeError, () => nullfunc("foo"));
    256    assert_throws_js(TypeError, () => nullfunc({}));
    257    assert_throws_js(TypeError, () => nullfunc(exports.testFunc));
    258    assert_throws_js(TypeError, () => nullfunc(() => {}));
    259  }
    260 }, "null casts");
    261 
    262 test(() => {
    263  exports.concreteStructArg(exports.makeStruct());
    264  assert_throws_js(TypeError, () => exports.concreteStructArg(exports.makeStruct2()));
    265  assert_throws_js(TypeError, () => exports.concreteStructArg(exports.makeArray()));
    266  assert_throws_js(TypeError, () => exports.concreteStructArg(42));
    267  assert_throws_js(TypeError, () => exports.concreteStructArg(42n));
    268  assert_throws_js(TypeError, () => exports.concreteStructArg("foo"));
    269  assert_throws_js(TypeError, () => exports.concreteStructArg({}));
    270  assert_throws_js(TypeError, () => exports.concreteStructArg(exports.testFunc));
    271  assert_throws_js(TypeError, () => exports.concreteStructArg(() => {}));
    272  assert_throws_js(TypeError, () => exports.concreteStructArg(null));
    273 
    274  exports.concreteStructNullableArg(null);
    275  exports.concreteStructNullableArg(exports.makeStruct());
    276  assert_throws_js(TypeError, () => exports.concreteStructNullableArg(exports.makeStruct2()));
    277  assert_throws_js(TypeError, () => exports.concreteStructNullableArg(exports.makeArray()));
    278  assert_throws_js(TypeError, () => exports.concreteStructNullableArg(42));
    279  assert_throws_js(TypeError, () => exports.concreteStructNullableArg(42n));
    280  assert_throws_js(TypeError, () => exports.concreteStructNullableArg("foo"));
    281  assert_throws_js(TypeError, () => exports.concreteStructNullableArg({}));
    282  assert_throws_js(TypeError, () => exports.concreteStructNullableArg(exports.testFunc));
    283  assert_throws_js(TypeError, () => exports.concreteStructNullableArg(() => {}));
    284 }, "concrete struct casts");
    285 
    286 test(() => {
    287  exports.concreteArrayArg(exports.makeArray());
    288  assert_throws_js(TypeError, () => exports.concreteArrayArg(exports.makeArray2()));
    289  assert_throws_js(TypeError, () => exports.concreteArrayArg(exports.makeStruct()));
    290  assert_throws_js(TypeError, () => exports.concreteArrayArg(42));
    291  assert_throws_js(TypeError, () => exports.concreteArrayArg(42n));
    292  assert_throws_js(TypeError, () => exports.concreteArrayArg("foo"));
    293  assert_throws_js(TypeError, () => exports.concreteArrayArg({}));
    294  assert_throws_js(TypeError, () => exports.concreteArrayArg(exports.testFunc));
    295  assert_throws_js(TypeError, () => exports.concreteArrayArg(() => {}));
    296  assert_throws_js(TypeError, () => exports.concreteArrayArg(null));
    297 
    298  exports.concreteArrayNullableArg(null);
    299  exports.concreteArrayNullableArg(exports.makeArray());
    300  assert_throws_js(TypeError, () => exports.concreteArrayNullableArg(exports.makeArray2()));
    301  assert_throws_js(TypeError, () => exports.concreteArrayNullableArg(exports.makeStruct()));
    302  assert_throws_js(TypeError, () => exports.concreteArrayNullableArg(42));
    303  assert_throws_js(TypeError, () => exports.concreteArrayNullableArg(42n));
    304  assert_throws_js(TypeError, () => exports.concreteArrayNullableArg("foo"));
    305  assert_throws_js(TypeError, () => exports.concreteArrayNullableArg({}));
    306  assert_throws_js(TypeError, () => exports.concreteArrayNullableArg(exports.testFunc));
    307  assert_throws_js(TypeError, () => exports.concreteArrayNullableArg(() => {}));
    308 }, "concrete array casts");
    309 
    310 test(() => {
    311  exports.concreteFuncArg(exports.testFunc);
    312  assert_throws_js(TypeError, () => exports.concreteFuncArg(exports.testFunc2));
    313  assert_throws_js(TypeError, () => exports.concreteFuncArg(exports.makeArray()));
    314  assert_throws_js(TypeError, () => exports.concreteFuncArg(exports.makeStruct()));
    315  assert_throws_js(TypeError, () => exports.concreteFuncArg(42));
    316  assert_throws_js(TypeError, () => exports.concreteFuncArg(42n));
    317  assert_throws_js(TypeError, () => exports.concreteFuncArg("foo"));
    318  assert_throws_js(TypeError, () => exports.concreteFuncArg({}));
    319  assert_throws_js(TypeError, () => exports.concreteFuncArg(() => {}));
    320  assert_throws_js(TypeError, () => exports.concreteFuncArg(null));
    321 
    322  exports.concreteFuncNullableArg(null);
    323  exports.concreteFuncNullableArg(exports.testFunc);
    324  assert_throws_js(TypeError, () => exports.concreteFuncNullableArg(exports.testFunc2));
    325  assert_throws_js(TypeError, () => exports.concreteFuncNullableArg(exports.makeArray()));
    326  assert_throws_js(TypeError, () => exports.concreteFuncNullableArg(exports.makeStruct()));
    327  assert_throws_js(TypeError, () => exports.concreteFuncNullableArg(42));
    328  assert_throws_js(TypeError, () => exports.concreteFuncNullableArg(42n));
    329  assert_throws_js(TypeError, () => exports.concreteFuncNullableArg("foo"));
    330  assert_throws_js(TypeError, () => exports.concreteFuncNullableArg({}));
    331  assert_throws_js(TypeError, () => exports.concreteFuncNullableArg(() => {}));
    332 }, "concrete func casts");