Showing preview only (9,214K chars total). Download the full file or copy to clipboard to get everything.
Repository: WebAssembly/wabt
Branch: main
Commit: e8ffd4d030ea
Files: 1850
Total size: 8.5 MB
Directory structure:
gitextract_5fuyu_57/
├── .clang-format
├── .flake8
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│ ├── actions/
│ │ └── release-archive/
│ │ └── action.yml
│ └── workflows/
│ ├── build.yml
│ ├── build_release.yml
│ ├── build_source_release.yml
│ └── wabt-cifuzz.yml
├── .gitignore
├── .gitmodules
├── .style.yapf
├── CMakeLists.txt
├── Contributing.md
├── LICENSE
├── Makefile
├── README.md
├── SECURITY.md
├── docs/
│ ├── decompiler.md
│ ├── demo/
│ │ ├── custom.css
│ │ ├── index.html
│ │ ├── libwabt.js
│ │ ├── libwabt.wasm
│ │ ├── share.js
│ │ ├── third_party/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── index.js
│ │ │ └── package.json
│ │ ├── third_party.bundle.js
│ │ ├── wasm2wat/
│ │ │ ├── demo.js
│ │ │ ├── examples.js
│ │ │ └── index.html
│ │ └── wat2wasm/
│ │ ├── demo.js
│ │ ├── examples.js
│ │ ├── index.html
│ │ └── worker.js
│ ├── doc/
│ │ ├── spectest-interp.1.html
│ │ ├── wasm-decompile.1.html
│ │ ├── wasm-interp.1.html
│ │ ├── wasm-objdump.1.html
│ │ ├── wasm-stats.1.html
│ │ ├── wasm-strip.1.html
│ │ ├── wasm-validate.1.html
│ │ ├── wasm2c.1.html
│ │ ├── wasm2wat.1.html
│ │ ├── wast2json.1.html
│ │ ├── wat-desugar.1.html
│ │ └── wat2wasm.1.html
│ └── wast2json.md
├── fuzz-in/
│ ├── wasm/
│ │ └── stuff.wasm
│ ├── wast/
│ │ └── basic.txt
│ └── wast.dict
├── fuzzers/
│ ├── read_binary_interp_fuzzer.cc
│ ├── read_binary_ir_fuzzer.cc
│ ├── wasm2wat_fuzzer.cc
│ ├── wasm_objdump_fuzzer.cc
│ └── wat2wasm_fuzzer.cc
├── include/
│ └── wabt/
│ ├── apply-names.h
│ ├── base-types.h
│ ├── binary-reader-ir.h
│ ├── binary-reader-logging.h
│ ├── binary-reader-nop.h
│ ├── binary-reader-objdump.h
│ ├── binary-reader-stats.h
│ ├── binary-reader.h
│ ├── binary-writer-spec.h
│ ├── binary-writer.h
│ ├── binary.h
│ ├── binding-hash.h
│ ├── c-writer.h
│ ├── cast.h
│ ├── color.h
│ ├── common.h
│ ├── decompiler-ast.h
│ ├── decompiler-ls.h
│ ├── decompiler-naming.h
│ ├── decompiler.h
│ ├── error-formatter.h
│ ├── error.h
│ ├── expr-visitor.h
│ ├── feature.def
│ ├── feature.h
│ ├── filenames.h
│ ├── generate-names.h
│ ├── interp/
│ │ ├── binary-reader-interp.h
│ │ ├── interp-inl.h
│ │ ├── interp-math.h
│ │ ├── interp-util.h
│ │ ├── interp-wasi.h
│ │ ├── interp.h
│ │ └── istream.h
│ ├── intrusive-list.h
│ ├── ir-util.h
│ ├── ir.h
│ ├── leb128.h
│ ├── lexer-source-line-finder.h
│ ├── lexer-source.h
│ ├── literal.h
│ ├── opcode-code-table.h
│ ├── opcode.def
│ ├── opcode.h
│ ├── option-parser.h
│ ├── range.h
│ ├── resolve-names.h
│ ├── result.h
│ ├── sha256.h
│ ├── shared-validator.h
│ ├── stream.h
│ ├── string-format.h
│ ├── string-util.h
│ ├── token.def
│ ├── token.h
│ ├── tracing.h
│ ├── type-checker.h
│ ├── type.h
│ ├── utf8.h
│ ├── validator.h
│ ├── wast-lexer.h
│ ├── wast-parser.h
│ └── wat-writer.h
├── man/
│ ├── spectest-interp.1
│ ├── wasm-decompile.1
│ ├── wasm-interp.1
│ ├── wasm-objdump.1
│ ├── wasm-stats.1
│ ├── wasm-strip.1
│ ├── wasm-validate.1
│ ├── wasm2c.1
│ ├── wasm2wat.1
│ ├── wast2json.1
│ ├── wat-desugar.1
│ └── wat2wasm.1
├── scripts/
│ ├── TC-s390x.cmake
│ ├── check_clean.py
│ ├── clang-format-diff.sh
│ ├── coverage.sh
│ ├── example-project/
│ │ ├── CMakeLists.txt
│ │ └── example.cpp
│ ├── fuzz-wasm-objdump.sh
│ ├── fuzz-wasm2wat.sh
│ ├── fuzz-wat2wasm.sh
│ ├── gen-emscripten-exported-json.py
│ ├── gen-wasm2c-templates.cmake
│ ├── generate-html-docs.sh
│ ├── help2man.lua
│ ├── sha256sum.py
│ └── wabt-config.cmake.in
├── src/
│ ├── apply-names.cc
│ ├── binary-reader-ir.cc
│ ├── binary-reader-logging.cc
│ ├── binary-reader-objdump.cc
│ ├── binary-reader-stats.cc
│ ├── binary-reader.cc
│ ├── binary-writer-spec.cc
│ ├── binary-writer.cc
│ ├── binary.cc
│ ├── binding-hash.cc
│ ├── c-writer.cc
│ ├── color.cc
│ ├── common.cc
│ ├── config.cc
│ ├── config.h.in
│ ├── decompiler.cc
│ ├── emscripten-exports.txt
│ ├── emscripten-helpers.cc
│ ├── error-formatter.cc
│ ├── expr-visitor.cc
│ ├── feature.cc
│ ├── filenames.cc
│ ├── generate-names.cc
│ ├── interp/
│ │ ├── binary-reader-interp.cc
│ │ ├── interp-util.cc
│ │ ├── interp-wasi.cc
│ │ ├── interp-wasm-c-api.cc
│ │ ├── interp.cc
│ │ ├── istream.cc
│ │ └── wasi_api.def
│ ├── ir-util.cc
│ ├── ir.cc
│ ├── leb128.cc
│ ├── lexer-keywords.txt
│ ├── lexer-source-line-finder.cc
│ ├── lexer-source.cc
│ ├── literal.cc
│ ├── opcode-code-table.c
│ ├── opcode.cc
│ ├── option-parser.cc
│ ├── prebuilt/
│ │ ├── .clang-format
│ │ ├── lexer-keywords.cc
│ │ ├── wasm2c_atomicops_source_declarations.cc
│ │ ├── wasm2c_header_bottom.cc
│ │ ├── wasm2c_header_top.cc
│ │ ├── wasm2c_simd_source_declarations.cc
│ │ ├── wasm2c_source_declarations.cc
│ │ └── wasm2c_source_includes.cc
│ ├── resolve-names.cc
│ ├── sha256.cc
│ ├── shared-validator.cc
│ ├── stream.cc
│ ├── template/
│ │ ├── wasm2c.bottom.h
│ │ ├── wasm2c.declarations.c
│ │ ├── wasm2c.includes.c
│ │ ├── wasm2c.top.h
│ │ ├── wasm2c_atomicops.declarations.c
│ │ └── wasm2c_simd.declarations.c
│ ├── test-binary-reader.cc
│ ├── test-filenames.cc
│ ├── test-hexfloat.cc
│ ├── test-interp.cc
│ ├── test-intrusive-list.cc
│ ├── test-literal.cc
│ ├── test-option-parser.cc
│ ├── test-utf8.cc
│ ├── test-wast-parser.cc
│ ├── token.cc
│ ├── tools/
│ │ ├── spectest-interp.cc
│ │ ├── wasm-decompile.cc
│ │ ├── wasm-interp.cc
│ │ ├── wasm-objdump.cc
│ │ ├── wasm-stats.cc
│ │ ├── wasm-strip.cc
│ │ ├── wasm-validate.cc
│ │ ├── wasm2c.cc
│ │ ├── wasm2wat-fuzz.cc
│ │ ├── wasm2wat.cc
│ │ ├── wast2json.cc
│ │ ├── wat-desugar.cc
│ │ └── wat2wasm.cc
│ ├── tracing.cc
│ ├── type-checker.cc
│ ├── utf8.cc
│ ├── validator.cc
│ ├── wabt.post.js
│ ├── wast-lexer.cc
│ ├── wast-parser.cc
│ └── wat-writer.cc
├── test/
│ ├── README.md
│ ├── binary/
│ │ ├── annotations-custom-sections.txt
│ │ ├── bad-alignment.txt
│ │ ├── bad-brtable-too-big.txt
│ │ ├── bad-call-indirect-reserved.txt
│ │ ├── bad-callindirect-invalid-sig.txt
│ │ ├── bad-code-metadata-function-count.txt
│ │ ├── bad-code-metadata-function-duplicate.txt
│ │ ├── bad-code-metadata-function-index.txt
│ │ ├── bad-code-metadata-function-out-of-order.txt
│ │ ├── bad-code-metadata-instance-count.txt
│ │ ├── bad-code-metadata-instance-duplicate.txt
│ │ ├── bad-code-metadata-instance-out-of-order.txt
│ │ ├── bad-data-count-mismatch.txt
│ │ ├── bad-data-count-order-after-code.txt
│ │ ├── bad-data-count-order-before-elem.txt
│ │ ├── bad-data-drop-no-data-count.txt
│ │ ├── bad-data-invalid-memidx.txt
│ │ ├── bad-data-size.txt
│ │ ├── bad-data-without-memory.txt
│ │ ├── bad-duplicate-section-around-custom.txt
│ │ ├── bad-duplicate-section.txt
│ │ ├── bad-duplicate-subsection.txt
│ │ ├── bad-elem-flags.txt
│ │ ├── bad-export-func.txt
│ │ ├── bad-export-out-of-range.txt
│ │ ├── bad-extra-end.txt
│ │ ├── bad-func-with-struct-type.txt
│ │ ├── bad-function-body-count.txt
│ │ ├── bad-function-body-size.txt
│ │ ├── bad-function-count-missing-code-section.txt
│ │ ├── bad-function-local-type.txt
│ │ ├── bad-function-names-too-many.txt
│ │ ├── bad-function-param-type.txt
│ │ ├── bad-function-result-type.txt
│ │ ├── bad-function-sig.txt
│ │ ├── bad-import-kind.txt
│ │ ├── bad-import-sig.txt
│ │ ├── bad-init-expr-callindirect.txt
│ │ ├── bad-interp-returncallindirect-invalid-sig.txt
│ │ ├── bad-linking-data-segment-index.txt
│ │ ├── bad-linking-function-index.txt
│ │ ├── bad-linking-global-index.txt
│ │ ├── bad-linking-metadata.txt
│ │ ├── bad-linking-tag-index.txt
│ │ ├── bad-logging-basic.txt
│ │ ├── bad-magic.txt
│ │ ├── bad-memory-grow-reserved.txt
│ │ ├── bad-memory-init-max-size.txt
│ │ ├── bad-memory-init-no-data-count.txt
│ │ ├── bad-memory-init-size.txt
│ │ ├── bad-memory-limits-flag-is64.txt
│ │ ├── bad-memory-limits-flag-leb128.txt
│ │ ├── bad-memory-limits-flag-shared.txt
│ │ ├── bad-memory-limits-flag.txt
│ │ ├── bad-memory-max-size.txt
│ │ ├── bad-memory-size-reserved.txt
│ │ ├── bad-multiple-catch-all.txt
│ │ ├── bad-name-section-invalid-index.txt
│ │ ├── bad-name-section-location.txt
│ │ ├── bad-names-duplicate-locals.txt
│ │ ├── bad-names-duplicates.txt
│ │ ├── bad-names-function-locals-out-of-order.txt
│ │ ├── bad-names-locals-out-of-order.txt
│ │ ├── bad-names-out-of-order.txt
│ │ ├── bad-op-after-end.txt
│ │ ├── bad-opcode-prefix.txt
│ │ ├── bad-opcode.txt
│ │ ├── bad-reference-indicies.txt
│ │ ├── bad-reloc-type.txt
│ │ ├── bad-relocs.txt
│ │ ├── bad-returncall-invalid-func.txt
│ │ ├── bad-returncallindirect-invalid-sig.txt
│ │ ├── bad-returncallindirect-reserved.txt
│ │ ├── bad-section-code-leb128.txt
│ │ ├── bad-section-ends-early.txt
│ │ ├── bad-section-size-zero.txt
│ │ ├── bad-segment-no-memory.txt
│ │ ├── bad-start-func.txt
│ │ ├── bad-subsection-out-of-order.txt
│ │ ├── bad-subsection-size.txt
│ │ ├── bad-subsection-unfinished.txt
│ │ ├── bad-table-limits-flag-is64.txt
│ │ ├── bad-table-limits-flag.txt
│ │ ├── bad-tag-after-global.txt
│ │ ├── bad-tag-before-memory.txt
│ │ ├── bad-too-many-locals.txt
│ │ ├── bad-type-form.txt
│ │ ├── bad-typecheck-fail.txt
│ │ ├── bad-typecheck-missing-drop.txt
│ │ ├── bad-unfinished-section.txt
│ │ ├── bad-version.txt
│ │ ├── basic.txt
│ │ ├── code-metadata-section.txt
│ │ ├── compact-imports.txt
│ │ ├── duplicate-func-names.txt
│ │ ├── duplicate-local-names.txt
│ │ ├── dylink-section.txt
│ │ ├── dylink0-section.txt
│ │ ├── function-local-count-zero.txt
│ │ ├── gen-wasm-parse-error.txt
│ │ ├── ignore-custom-section-error-objdump.txt
│ │ ├── ignore-custom-section-error-wasm2wat.txt
│ │ ├── invalid-name.txt
│ │ ├── linking-section.txt
│ │ ├── missing-code-section-empty-function-section.txt
│ │ ├── missing-function-section-empty-code-section.txt
│ │ ├── names.txt
│ │ ├── no-global-names.txt
│ │ ├── no-names.txt
│ │ ├── relocs.txt
│ │ ├── target-features-section.txt
│ │ ├── unrecognized-layer.txt
│ │ ├── unsupported-component.txt
│ │ └── user-section.txt
│ ├── decompile/
│ │ ├── basic.txt
│ │ ├── code-metadata.txt
│ │ ├── loadstore.txt
│ │ ├── names.txt
│ │ ├── passive-data.txt
│ │ ├── precedence.txt
│ │ └── stack-flush.txt
│ ├── desugar/
│ │ ├── basic.txt
│ │ ├── call_indirect.txt
│ │ ├── implicit-func-type.txt
│ │ ├── locals.txt
│ │ └── try.txt
│ ├── dump/
│ │ ├── array.txt
│ │ ├── atomic.txt
│ │ ├── bad-directory.txt
│ │ ├── bad-version-logging.txt
│ │ ├── bad-version.txt
│ │ ├── basic.txt
│ │ ├── basic_dump_only.txt
│ │ ├── binary.txt
│ │ ├── block-257-exprs-br.txt
│ │ ├── block-257-exprs.txt
│ │ ├── block-multi.txt
│ │ ├── block.txt
│ │ ├── br-block-named.txt
│ │ ├── br-block.txt
│ │ ├── br-loop-inner-expr.txt
│ │ ├── br-loop-inner.txt
│ │ ├── br-loop.txt
│ │ ├── brif-loop.txt
│ │ ├── brif.txt
│ │ ├── brtable-empty.txt
│ │ ├── brtable.txt
│ │ ├── bulk-memory.txt
│ │ ├── bulk-memory64.txt
│ │ ├── call.txt
│ │ ├── call_ref.txt
│ │ ├── callimport.txt
│ │ ├── callindirect.txt
│ │ ├── cast.txt
│ │ ├── code-metadata.txt
│ │ ├── compact-imports.txt
│ │ ├── compare.txt
│ │ ├── const.txt
│ │ ├── convert-sat.txt
│ │ ├── convert.txt
│ │ ├── data-count-section-removed.txt
│ │ ├── data-count-section.txt
│ │ ├── debug-import-names.txt
│ │ ├── debug-names.txt
│ │ ├── dedupe-sig.txt
│ │ ├── drop.txt
│ │ ├── elem-mvp-compat-named.txt
│ │ ├── elem-mvp-compat.txt
│ │ ├── export-multi.txt
│ │ ├── expr-br.txt
│ │ ├── expr-brif.txt
│ │ ├── extended-const.txt
│ │ ├── extended-names.txt
│ │ ├── func-exported.txt
│ │ ├── func-multi.txt
│ │ ├── func-named.txt
│ │ ├── func-result-multi.txt
│ │ ├── global.txt
│ │ ├── globalget.txt
│ │ ├── globalset.txt
│ │ ├── hexfloat_f32.txt
│ │ ├── hexfloat_f64.txt
│ │ ├── if-multi.txt
│ │ ├── if-then-else-list.txt
│ │ ├── if-then-list.txt
│ │ ├── if.txt
│ │ ├── import.txt
│ │ ├── invalid-data-segment-no-memory.txt
│ │ ├── invalid-data-segment-offset.txt
│ │ ├── invalid-elem-segment-no-table.txt
│ │ ├── invalid-elem-segment-offset.txt
│ │ ├── invalid-init-exprs.txt
│ │ ├── load-aligned.txt
│ │ ├── load.txt
│ │ ├── load64.txt
│ │ ├── local-indices.txt
│ │ ├── local-tee.txt
│ │ ├── localget-param.txt
│ │ ├── localget.txt
│ │ ├── locals.txt
│ │ ├── localset-param.txt
│ │ ├── localset.txt
│ │ ├── loop-257-exprs-br.txt
│ │ ├── loop-257-exprs.txt
│ │ ├── loop-multi.txt
│ │ ├── loop.txt
│ │ ├── memory-1-byte.txt
│ │ ├── memory-data-size.txt
│ │ ├── memory-grow.txt
│ │ ├── memory-hex.txt
│ │ ├── memory-size.txt
│ │ ├── memory.txt
│ │ ├── memory64.txt
│ │ ├── module-name.txt
│ │ ├── multi_file.txt
│ │ ├── mutable-global.txt
│ │ ├── no-canonicalize.txt
│ │ ├── nocheck.txt
│ │ ├── noncanon-leb128-opcode.txt
│ │ ├── nop.txt
│ │ ├── param-multi.txt
│ │ ├── reference-types.txt
│ │ ├── relocations-all-features.txt
│ │ ├── relocations-block-types.txt
│ │ ├── relocations-long-func-bodies.txt
│ │ ├── relocations-long-func-section.txt
│ │ ├── relocations-section-target.txt
│ │ ├── relocations.txt
│ │ ├── result.txt
│ │ ├── rethrow.txt
│ │ ├── return.txt
│ │ ├── section-offsets.txt
│ │ ├── select.txt
│ │ ├── signatures.txt
│ │ ├── simd-basic.txt
│ │ ├── simd-binary.txt
│ │ ├── simd-bitselect.txt
│ │ ├── simd-compare.txt
│ │ ├── simd-lane.txt
│ │ ├── simd-load-lane.txt
│ │ ├── simd-load-store.txt
│ │ ├── simd-shift.txt
│ │ ├── simd-splat.txt
│ │ ├── simd-store-lane.txt
│ │ ├── simd-unary.txt
│ │ ├── start.txt
│ │ ├── store-aligned.txt
│ │ ├── store.txt
│ │ ├── store64.txt
│ │ ├── string-escape.txt
│ │ ├── string-hex.txt
│ │ ├── struct.txt
│ │ ├── symbol-tables-all-features.txt
│ │ ├── symbol-tables.txt
│ │ ├── table-multi.txt
│ │ ├── table.txt
│ │ ├── tag.txt
│ │ ├── tail-call.txt
│ │ ├── throw.txt
│ │ ├── try-catch-all.txt
│ │ ├── try-delegate.txt
│ │ ├── try-multi.txt
│ │ ├── try.txt
│ │ ├── typed-func-ref-signature.txt
│ │ ├── typed-func-refs-locals.txt
│ │ ├── typed_func_refs_params.txt
│ │ ├── typed_func_refs_results.txt
│ │ ├── unary-extend.txt
│ │ ├── unary.txt
│ │ └── unreachable.txt
│ ├── find_exe.py
│ ├── gen-spec-empty-prefix.js
│ ├── gen-spec-js/
│ │ ├── action.txt
│ │ ├── assert_exhaustion.txt
│ │ ├── assert_malformed-quote.txt
│ │ ├── assert_malformed.txt
│ │ ├── assert_return.txt
│ │ ├── assert_return_nan.txt
│ │ ├── assert_trap.txt
│ │ ├── assert_uninstantiable.txt
│ │ ├── assert_unlinkable.txt
│ │ ├── basic.txt
│ │ ├── many-modules.txt
│ │ └── register.txt
│ ├── gen-spec-js.py
│ ├── gen-spec-prefix.js
│ ├── gen-spec-wast.py
│ ├── gen-wasm.py
│ ├── harness/
│ │ └── wasm2c/
│ │ ├── floating_point.txt
│ │ ├── simd_formatting.txt
│ │ ├── stdin_file.txt
│ │ └── stdin_file.wast
│ ├── help/
│ │ ├── spectest-interp.txt
│ │ ├── wasm-interp.txt
│ │ ├── wasm-objdump.txt
│ │ ├── wasm-stats.txt
│ │ ├── wasm-validate.txt
│ │ ├── wasm2wat.txt
│ │ ├── wast2json.txt
│ │ ├── wat-desugar.txt
│ │ └── wat2wasm.txt
│ ├── interp/
│ │ ├── atomic-load.txt
│ │ ├── atomic-rmw-add.txt
│ │ ├── atomic-rmw-and.txt
│ │ ├── atomic-rmw-cmpxchg.txt
│ │ ├── atomic-rmw-or.txt
│ │ ├── atomic-rmw-sub.txt
│ │ ├── atomic-rmw-xchg.txt
│ │ ├── atomic-rmw-xor.txt
│ │ ├── atomic-store.txt
│ │ ├── basic-logging.txt
│ │ ├── basic-tracing.txt
│ │ ├── basic.txt
│ │ ├── binary.txt
│ │ ├── block-multi.txt
│ │ ├── br.txt
│ │ ├── brif-loop.txt
│ │ ├── brif.txt
│ │ ├── brtable.txt
│ │ ├── call-dummy-import.txt
│ │ ├── call-multi-result.txt
│ │ ├── call-zero-args.txt
│ │ ├── call.txt
│ │ ├── callimport-zero-args.txt
│ │ ├── callindirect.txt
│ │ ├── cast.txt
│ │ ├── compare.txt
│ │ ├── convert-sat.txt
│ │ ├── convert.txt
│ │ ├── custom-page-sizes.txt
│ │ ├── empty.txt
│ │ ├── expr-block.txt
│ │ ├── expr-br.txt
│ │ ├── expr-brif.txt
│ │ ├── expr-if.txt
│ │ ├── if-multi.txt
│ │ ├── if.txt
│ │ ├── import.txt
│ │ ├── load.txt
│ │ ├── load64.txt
│ │ ├── loop-multi.txt
│ │ ├── loop.txt
│ │ ├── memory-empty-segment.txt
│ │ ├── nested-if.txt
│ │ ├── reference-types.txt
│ │ ├── rethrow-and-br.txt
│ │ ├── rethrow.txt
│ │ ├── return-call-import.txt
│ │ ├── return-call-indirect-import.txt
│ │ ├── return-call-indirect.txt
│ │ ├── return-call-local-set.txt
│ │ ├── return-call.txt
│ │ ├── return-void.txt
│ │ ├── return.txt
│ │ ├── run-export-as-global.txt
│ │ ├── run-export-with-argument.txt
│ │ ├── run-export-with-invalid-arguments-size.txt
│ │ ├── run-non-func-export.txt
│ │ ├── select-ref.txt
│ │ ├── select.txt
│ │ ├── simd-basic.txt
│ │ ├── simd-binary.txt
│ │ ├── simd-bitselect.txt
│ │ ├── simd-compare.txt
│ │ ├── simd-lane.txt
│ │ ├── simd-load-store.txt
│ │ ├── simd-shift.txt
│ │ ├── simd-splat.txt
│ │ ├── simd-unary.txt
│ │ ├── start-failure.txt
│ │ ├── start.txt
│ │ ├── store.txt
│ │ ├── store64.txt
│ │ ├── throw-across-frame.txt
│ │ ├── trap-with-callstack.txt
│ │ ├── try-delegate.txt
│ │ ├── try.txt
│ │ ├── unary-extend.txt
│ │ ├── unary.txt
│ │ └── unreachable.txt
│ ├── old-spec/
│ │ └── proposals/
│ │ └── memory64/
│ │ ├── address.wast
│ │ ├── address64.wast
│ │ ├── align64.wast
│ │ ├── binary-leb128.wast
│ │ ├── binary.wast
│ │ ├── binary0.wast
│ │ ├── call_indirect.wast
│ │ ├── endianness64.wast
│ │ ├── float_memory64.wast
│ │ ├── imports.wast
│ │ ├── load64.wast
│ │ ├── memory.wast
│ │ ├── memory64.wast
│ │ ├── memory_copy.wast
│ │ ├── memory_fill.wast
│ │ ├── memory_grow64.wast
│ │ ├── memory_init.wast
│ │ ├── memory_redundancy64.wast
│ │ ├── memory_trap64.wast
│ │ ├── simd_address.wast
│ │ ├── table.wast
│ │ ├── table_copy.wast
│ │ ├── table_copy_mixed.wast
│ │ ├── table_fill.wast
│ │ ├── table_get.wast
│ │ ├── table_grow.wast
│ │ ├── table_init.wast
│ │ ├── table_set.wast
│ │ └── table_size.wast
│ ├── parse/
│ │ ├── all-features.txt
│ │ ├── annotations.txt
│ │ ├── assert/
│ │ │ ├── assert-after-module.txt
│ │ │ ├── assert-return-arithmetic-nan.txt
│ │ │ ├── assert-return-canonical-nan.txt
│ │ │ ├── assertexception.txt
│ │ │ ├── assertinvalid-binary-module.txt
│ │ │ ├── assertinvalid.txt
│ │ │ ├── assertmalformed.txt
│ │ │ ├── assertreturn.txt
│ │ │ ├── bad-assert-before-module.txt
│ │ │ ├── bad-assertexception.txt
│ │ │ ├── bad-assertreturn-non-const.txt
│ │ │ ├── bad-assertreturn-too-few.txt
│ │ │ ├── bad-assertreturn-too-many.txt
│ │ │ ├── bad-assertreturn-unknown-function.txt
│ │ │ ├── bad-invoke-no-module.txt
│ │ │ ├── bad-invoke-too-few.txt
│ │ │ ├── bad-invoke-too-many.txt
│ │ │ ├── bad-invoke-unknown-function.txt
│ │ │ └── invoke.txt
│ │ ├── bad-annotations.txt
│ │ ├── bad-call-ref.txt
│ │ ├── bad-crlf.txt
│ │ ├── bad-delegate-label.txt
│ │ ├── bad-error-long-line.txt
│ │ ├── bad-error-long-token.txt
│ │ ├── bad-identifiers-with-annotations.txt
│ │ ├── bad-identifiers.txt
│ │ ├── bad-input-command.txt
│ │ ├── bad-output-command.txt
│ │ ├── bad-references.txt
│ │ ├── bad-refs-in-trytable.txt
│ │ ├── bad-single-semicolon.txt
│ │ ├── bad-string-eof.txt
│ │ ├── bad-string-escape.txt
│ │ ├── bad-string-hex-escape.txt
│ │ ├── bad-string-unicode-escape-large.txt
│ │ ├── bad-string-unicode-escape-short.txt
│ │ ├── bad-string-unicode-escape-unallowed.txt
│ │ ├── bad-string-unicode-escape-unexpected.txt
│ │ ├── bad-string-unicode-escape-unterminated.txt
│ │ ├── bad-string-unicode-escape.txt
│ │ ├── bad-toplevel.txt
│ │ ├── basic.txt
│ │ ├── branch-hints.txt
│ │ ├── custom-sections.txt
│ │ ├── empty-file.txt
│ │ ├── export-mutable-global.txt
│ │ ├── expr/
│ │ │ ├── atomic-align.txt
│ │ │ ├── atomic-disabled.txt
│ │ │ ├── atomic.txt
│ │ │ ├── atomic64.txt
│ │ │ ├── bad-atomic-unnatural-align.txt
│ │ │ ├── bad-binary-one-expr.txt
│ │ │ ├── bad-block-end-label.txt
│ │ │ ├── bad-block-mismatch-label.txt
│ │ │ ├── bad-br-bad-depth.txt
│ │ │ ├── bad-br-defined-later.txt
│ │ │ ├── bad-br-name-undefined.txt
│ │ │ ├── bad-br-name.txt
│ │ │ ├── bad-br-no-depth.txt
│ │ │ ├── bad-br-undefined.txt
│ │ │ ├── bad-brtable-bad-depth.txt
│ │ │ ├── bad-brtable-no-vars.txt
│ │ │ ├── bad-compare-one-expr.txt
│ │ │ ├── bad-const-f32-nan-arith.txt
│ │ │ ├── bad-const-f32-trailing.txt
│ │ │ ├── bad-const-f64-nan-arith.txt
│ │ │ ├── bad-const-i32-garbage.txt
│ │ │ ├── bad-const-i32-just-negative-sign.txt
│ │ │ ├── bad-const-i32-overflow.txt
│ │ │ ├── bad-const-i32-trailing.txt
│ │ │ ├── bad-const-i32-underflow.txt
│ │ │ ├── bad-const-i64-overflow.txt
│ │ │ ├── bad-const-type-i32-in-non-simd-const.txt
│ │ │ ├── bad-const-v128-i16x8-overflow.txt
│ │ │ ├── bad-const-v128-i32x4-overflow.txt
│ │ │ ├── bad-const-v128-i8x16-overflow.txt
│ │ │ ├── bad-const-v128-nat-overflow.txt
│ │ │ ├── bad-const-v128-type-i32-expected.txt
│ │ │ ├── bad-convert-float-sign.txt
│ │ │ ├── bad-convert-int-no-sign.txt
│ │ │ ├── bad-globalget-name-undefined.txt
│ │ │ ├── bad-globalget-undefined.txt
│ │ │ ├── bad-globalset-name-undefined.txt
│ │ │ ├── bad-globalset-undefined.txt
│ │ │ ├── bad-if-end-label.txt
│ │ │ ├── bad-if-mismatch-label.txt
│ │ │ ├── bad-if-no-then.txt
│ │ │ ├── bad-load-align-misspelled.txt
│ │ │ ├── bad-load-align-negative.txt
│ │ │ ├── bad-load-align-not-pot.txt
│ │ │ ├── bad-load-align.txt
│ │ │ ├── bad-load-float-sign.txt
│ │ │ ├── bad-load-offset-negative.txt
│ │ │ ├── bad-load-type.txt
│ │ │ ├── bad-localget-name-undefined.txt
│ │ │ ├── bad-localget-name.txt
│ │ │ ├── bad-localget-undefined.txt
│ │ │ ├── bad-localset-name-undefined.txt
│ │ │ ├── bad-localset-name.txt
│ │ │ ├── bad-localset-no-value.txt
│ │ │ ├── bad-localset-undefined.txt
│ │ │ ├── bad-loop-end-label.txt
│ │ │ ├── bad-loop-mismatch-label.txt
│ │ │ ├── bad-memory-copy-differing-type.txt
│ │ │ ├── bad-nop.txt
│ │ │ ├── bad-select-multi.txt
│ │ │ ├── bad-simd-shuffle-lane-index-overflow.txt
│ │ │ ├── bad-simd-shuffle-lane-index-overflow2.txt
│ │ │ ├── bad-simd-shuffle-nat-expected.txt
│ │ │ ├── bad-simd-shuffle-not-enough-indices.txt
│ │ │ ├── bad-store-align-not-pot.txt
│ │ │ ├── bad-store-align.txt
│ │ │ ├── bad-store-float.sign.txt
│ │ │ ├── bad-store-offset-negative.txt
│ │ │ ├── bad-store-type.txt
│ │ │ ├── bad-try-clause.txt
│ │ │ ├── bad-try-delegate.txt
│ │ │ ├── bad-try-multiple-catch.txt
│ │ │ ├── bad-unexpected.txt
│ │ │ ├── binary.txt
│ │ │ ├── block-multi-named.txt
│ │ │ ├── block-multi.txt
│ │ │ ├── block-named.txt
│ │ │ ├── block-return.txt
│ │ │ ├── block.txt
│ │ │ ├── br-block.txt
│ │ │ ├── br-loop.txt
│ │ │ ├── br-named.txt
│ │ │ ├── br.txt
│ │ │ ├── brif-named.txt
│ │ │ ├── brif.txt
│ │ │ ├── brtable-multi.txt
│ │ │ ├── brtable-named.txt
│ │ │ ├── brtable.txt
│ │ │ ├── bulk-memory-disabled.txt
│ │ │ ├── bulk-memory-named.txt
│ │ │ ├── bulk-memory-named64.txt
│ │ │ ├── call-defined-later.txt
│ │ │ ├── call-name-prefix.txt
│ │ │ ├── call-named.txt
│ │ │ ├── call.txt
│ │ │ ├── callimport-defined-later.txt
│ │ │ ├── callimport-named.txt
│ │ │ ├── callimport-type.txt
│ │ │ ├── callimport.txt
│ │ │ ├── callindirect-named.txt
│ │ │ ├── callindirect.txt
│ │ │ ├── callref-imported-function.txt
│ │ │ ├── callref-internal-function.txt
│ │ │ ├── cast.txt
│ │ │ ├── compare.txt
│ │ │ ├── const.txt
│ │ │ ├── convert-sat.txt
│ │ │ ├── convert.txt
│ │ │ ├── drop.txt
│ │ │ ├── expr-br.txt
│ │ │ ├── expr-brif.txt
│ │ │ ├── globalget-named.txt
│ │ │ ├── globalget.txt
│ │ │ ├── globalset-named.txt
│ │ │ ├── globalset.txt
│ │ │ ├── if-multi-named.txt
│ │ │ ├── if-multi.txt
│ │ │ ├── if-return.txt
│ │ │ ├── if-then-br-named.txt
│ │ │ ├── if-then-br.txt
│ │ │ ├── if-then-else-br-named.txt
│ │ │ ├── if-then-else-br.txt
│ │ │ ├── if-then-else-list.txt
│ │ │ ├── if-then-else.txt
│ │ │ ├── if.txt
│ │ │ ├── load-aligned.txt
│ │ │ ├── load-offset.txt
│ │ │ ├── load.txt
│ │ │ ├── load64.txt
│ │ │ ├── local-tee.txt
│ │ │ ├── localget-index-after-param.txt
│ │ │ ├── localget-index-mixed-named-unnamed.txt
│ │ │ ├── localget-named.txt
│ │ │ ├── localget-param-named.txt
│ │ │ ├── localget-param.txt
│ │ │ ├── localget.txt
│ │ │ ├── localset-index-after-param.txt
│ │ │ ├── localset-index-mixed-named-unnamed.txt
│ │ │ ├── localset-named.txt
│ │ │ ├── localset-param-named.txt
│ │ │ ├── localset-param.txt
│ │ │ ├── localset.txt
│ │ │ ├── loop-multi-named.txt
│ │ │ ├── loop-multi.txt
│ │ │ ├── loop-named.txt
│ │ │ ├── loop.txt
│ │ │ ├── memory-copy-differing-type.txt
│ │ │ ├── memory-copy.txt
│ │ │ ├── memory-copy64.txt
│ │ │ ├── memory-drop.txt
│ │ │ ├── memory-fill.txt
│ │ │ ├── memory-fill64.txt
│ │ │ ├── memory-grow.txt
│ │ │ ├── memory-grow64.txt
│ │ │ ├── memory-init.txt
│ │ │ ├── memory-init64.txt
│ │ │ ├── memory-size.txt
│ │ │ ├── nop.txt
│ │ │ ├── reference-types-call-indirect.txt
│ │ │ ├── reference-types-named.txt
│ │ │ ├── reference-types.txt
│ │ │ ├── rethrow.txt
│ │ │ ├── return-block.txt
│ │ │ ├── return-if.txt
│ │ │ ├── return-void.txt
│ │ │ ├── return.txt
│ │ │ ├── select.txt
│ │ │ ├── simd.txt
│ │ │ ├── store-aligned.txt
│ │ │ ├── store-offset.txt
│ │ │ ├── store.txt
│ │ │ ├── store64.txt
│ │ │ ├── table-copy.txt
│ │ │ ├── table-drop.txt
│ │ │ ├── table-get.txt
│ │ │ ├── table-grow.txt
│ │ │ ├── table-init.txt
│ │ │ ├── table-set.txt
│ │ │ ├── tail-call-disabled.txt
│ │ │ ├── tail-call-named.txt
│ │ │ ├── tail-call.txt
│ │ │ ├── throw.txt
│ │ │ ├── try-catch-all.txt
│ │ │ ├── try-delegate.txt
│ │ │ ├── try-multi.txt
│ │ │ ├── try-table.txt
│ │ │ ├── try.txt
│ │ │ ├── unary-extend.txt
│ │ │ ├── unary.txt
│ │ │ └── unreachable.txt
│ │ ├── force-color.txt
│ │ ├── func/
│ │ │ ├── bad-func-name.txt
│ │ │ ├── bad-local-binding-no-type.txt
│ │ │ ├── bad-local-binding.txt
│ │ │ ├── bad-local-name.txt
│ │ │ ├── bad-local-redefinition.txt
│ │ │ ├── bad-local-type-list.txt
│ │ │ ├── bad-local-type.txt
│ │ │ ├── bad-param-binding.txt
│ │ │ ├── bad-param-name.txt
│ │ │ ├── bad-param-redefinition.txt
│ │ │ ├── bad-param-type-list.txt
│ │ │ ├── bad-param.txt
│ │ │ ├── bad-result-type.txt
│ │ │ ├── bad-sig-param-type-mismatch.txt
│ │ │ ├── bad-sig-params-empty.txt
│ │ │ ├── bad-sig-result-type-mismatch.txt
│ │ │ ├── bad-sig-result-type-not-void.txt
│ │ │ ├── bad-sig-result-type-void.txt
│ │ │ ├── bad-sig-too-few-params.txt
│ │ │ ├── bad-sig-too-many-params.txt
│ │ │ ├── func-named.txt
│ │ │ ├── local-empty.txt
│ │ │ ├── local-multi.txt
│ │ │ ├── local.txt
│ │ │ ├── no-space.txt
│ │ │ ├── param-binding.txt
│ │ │ ├── param-multi.txt
│ │ │ ├── param-type-1.txt
│ │ │ ├── param-type-2.txt
│ │ │ ├── result-empty.txt
│ │ │ ├── result-multi.txt
│ │ │ ├── result.txt
│ │ │ ├── sig-match.txt
│ │ │ └── sig.txt
│ │ ├── identifiers-with-annotations.txt
│ │ ├── line-comment.txt
│ │ ├── module/
│ │ │ ├── array-mut-field.txt
│ │ │ ├── array.txt
│ │ │ ├── bad-array-no-fields.txt
│ │ │ ├── bad-array-too-many-fields.txt
│ │ │ ├── bad-binary-module-magic.txt
│ │ │ ├── bad-elem-redefinition.txt
│ │ │ ├── bad-element-followed-by-illegal-expression.txt
│ │ │ ├── bad-export-func-empty.txt
│ │ │ ├── bad-export-func-name-undefined.txt
│ │ │ ├── bad-export-func-name.txt
│ │ │ ├── bad-export-func-no-string.txt
│ │ │ ├── bad-export-func-too-many.txt
│ │ │ ├── bad-export-func-undefined.txt
│ │ │ ├── bad-export-global-name-undefined.txt
│ │ │ ├── bad-export-global-undefined.txt
│ │ │ ├── bad-export-memory-name-undefined.txt
│ │ │ ├── bad-export-memory-undefined.txt
│ │ │ ├── bad-export-table-name-undefined.txt
│ │ │ ├── bad-export-table-undefined.txt
│ │ │ ├── bad-func-redefinition.txt
│ │ │ ├── bad-global-invalid-expr.txt
│ │ │ ├── bad-global-invalid-globalget.txt
│ │ │ ├── bad-import-func-not-param.txt
│ │ │ ├── bad-import-func-not-result.txt
│ │ │ ├── bad-import-func-one-string.txt
│ │ │ ├── bad-import-func-redefinition.txt
│ │ │ ├── bad-import-global-redefinition.txt
│ │ │ ├── bad-import-memory-redefinition.txt
│ │ │ ├── bad-import-table-redefinition.txt
│ │ │ ├── bad-import-table-shared.txt
│ │ │ ├── bad-memory-empty.txt
│ │ │ ├── bad-memory-init-size-negative.txt
│ │ │ ├── bad-memory-init-size-too-big.txt
│ │ │ ├── bad-memory-init-size.txt
│ │ │ ├── bad-memory-max-less-than-init.txt
│ │ │ ├── bad-memory-max-size-negative.txt
│ │ │ ├── bad-memory-max-size-too-big.txt
│ │ │ ├── bad-memory-max-size.txt
│ │ │ ├── bad-memory-segment-address.txt
│ │ │ ├── bad-memory-shared-nomax.txt
│ │ │ ├── bad-memory-too-many.txt
│ │ │ ├── bad-module-multi.txt
│ │ │ ├── bad-module-no-close.txt
│ │ │ ├── bad-module-with-assert.txt
│ │ │ ├── bad-start-not-nullary.txt
│ │ │ ├── bad-start-not-void.txt
│ │ │ ├── bad-start-too-many.txt
│ │ │ ├── bad-table-elem.txt
│ │ │ ├── bad-table-invalid-function.txt
│ │ │ ├── bad-table-no-offset.txt
│ │ │ ├── bad-table-too-many.txt
│ │ │ ├── binary-module.txt
│ │ │ ├── data-offset.txt
│ │ │ ├── elem-offset.txt
│ │ │ ├── export-func-multi.txt
│ │ │ ├── export-func-named.txt
│ │ │ ├── export-func.txt
│ │ │ ├── export-global.txt
│ │ │ ├── export-memory-multi.txt
│ │ │ ├── export-memory.txt
│ │ │ ├── export-table.txt
│ │ │ ├── export-tag.txt
│ │ │ ├── global.txt
│ │ │ ├── import-func-no-param.txt
│ │ │ ├── import-func-type.txt
│ │ │ ├── import-func.txt
│ │ │ ├── import-global-globalget.txt
│ │ │ ├── import-global.txt
│ │ │ ├── import-memory-shared.txt
│ │ │ ├── import-memory.txt
│ │ │ ├── import-mutable-global.txt
│ │ │ ├── import-table.txt
│ │ │ ├── import-tag.txt
│ │ │ ├── memory-init-max-size.txt
│ │ │ ├── memory-init-size.txt
│ │ │ ├── memory-segment-1.txt
│ │ │ ├── memory-segment-long.txt
│ │ │ ├── memory-segment-many.txt
│ │ │ ├── memory-segment-multi-string.txt
│ │ │ ├── memory-segment-passive.txt
│ │ │ ├── memory-shared.txt
│ │ │ ├── module-empty.txt
│ │ │ ├── reference-types-disabled.txt
│ │ │ ├── start-named.txt
│ │ │ ├── start.txt
│ │ │ ├── struct-and-func.txt
│ │ │ ├── struct-field-name.txt
│ │ │ ├── struct-mut-field.txt
│ │ │ ├── struct.txt
│ │ │ ├── table-elem-expr.txt
│ │ │ ├── table-elem-var.txt
│ │ │ ├── table-named.txt
│ │ │ ├── table.txt
│ │ │ ├── tag.txt
│ │ │ ├── type-empty-param.txt
│ │ │ ├── type-empty.txt
│ │ │ ├── type-multi-param.txt
│ │ │ ├── type-no-param.txt
│ │ │ └── type.txt
│ │ ├── nested-comments.txt
│ │ ├── stdin.txt
│ │ ├── string-escape.txt
│ │ └── string-hex.txt
│ ├── pipes.txt
│ ├── regress/
│ │ ├── bad-annotation.txt
│ │ ├── bad-annotation2.txt
│ │ ├── bad-missing-end.txt
│ │ ├── bad-u64-leb128.txt
│ │ ├── empty-quoted-module.txt
│ │ ├── huge-offset.txt
│ │ ├── interp-ehv3-locals.txt
│ │ ├── interp-throw-before-try.txt
│ │ ├── issue-2423-wasm2c-no-extension.txt
│ │ ├── recursion-issue.txt
│ │ ├── regress-1.txt
│ │ ├── regress-10.txt
│ │ ├── regress-11.txt
│ │ ├── regress-12.txt
│ │ ├── regress-13.txt
│ │ ├── regress-14.txt
│ │ ├── regress-15.txt
│ │ ├── regress-16.txt
│ │ ├── regress-1674.txt
│ │ ├── regress-17.txt
│ │ ├── regress-18.txt
│ │ ├── regress-19.txt
│ │ ├── regress-1922.txt
│ │ ├── regress-1924.txt
│ │ ├── regress-2.txt
│ │ ├── regress-20.txt
│ │ ├── regress-2034.txt
│ │ ├── regress-2039.txt
│ │ ├── regress-21.txt
│ │ ├── regress-2110.txt
│ │ ├── regress-22.txt
│ │ ├── regress-23.txt
│ │ ├── regress-24.txt
│ │ ├── regress-25.txt
│ │ ├── regress-26.txt
│ │ ├── regress-2670.txt
│ │ ├── regress-27.txt
│ │ ├── regress-28.txt
│ │ ├── regress-29.txt
│ │ ├── regress-3.txt
│ │ ├── regress-30.txt
│ │ ├── regress-31.txt
│ │ ├── regress-32.txt
│ │ ├── regress-33.txt
│ │ ├── regress-34.txt
│ │ ├── regress-35.txt
│ │ ├── regress-36.txt
│ │ ├── regress-37.txt
│ │ ├── regress-4.txt
│ │ ├── regress-5.txt
│ │ ├── regress-6.txt
│ │ ├── regress-7.txt
│ │ ├── regress-8.txt
│ │ ├── regress-9.txt
│ │ ├── undefined-shifts.txt
│ │ ├── unterminated-annotation.txt
│ │ ├── unterminated-annotation2.txt
│ │ ├── wasm2c-ehv3-setjmp-volatile.txt
│ │ ├── wasm2c-try-br.txt
│ │ ├── wasm2c-try-reset.txt
│ │ └── write-memuse.txt
│ ├── roundtrip/
│ │ ├── apply-global-names.txt
│ │ ├── apply-memory-names.txt
│ │ ├── bulk-memory.txt
│ │ ├── bulk-memory64.txt
│ │ ├── code-metadata.txt
│ │ ├── custom-page-sizes.txt
│ │ ├── custom-sections.txt
│ │ ├── debug-import-names.txt
│ │ ├── debug-names-after-data.txt
│ │ ├── debug-names.txt
│ │ ├── elem-declare.txt
│ │ ├── elem-nonzero-table.txt
│ │ ├── fold-atomic-fence.txt
│ │ ├── fold-atomic.txt
│ │ ├── fold-basic.txt
│ │ ├── fold-block-labels.txt
│ │ ├── fold-block.txt
│ │ ├── fold-bulk-memory.txt
│ │ ├── fold-call-import-gen-names.txt
│ │ ├── fold-call.txt
│ │ ├── fold-callref.txt
│ │ ├── fold-fac.txt
│ │ ├── fold-function-references.txt
│ │ ├── fold-global-getset.txt
│ │ ├── fold-load-store.txt
│ │ ├── fold-load-store64.txt
│ │ ├── fold-local-getset.txt
│ │ ├── fold-multi.txt
│ │ ├── fold-nop.txt
│ │ ├── fold-reference-types.txt
│ │ ├── fold-rethrow.txt
│ │ ├── fold-simd.txt
│ │ ├── fold-tail-call.txt
│ │ ├── fold-throw.txt
│ │ ├── fold-try-delegate.txt
│ │ ├── fold-try-table.txt
│ │ ├── fold-try.txt
│ │ ├── fold-unreachable.txt
│ │ ├── func-index.txt
│ │ ├── generate-bulk-memory-names.txt
│ │ ├── generate-existing-name.txt
│ │ ├── generate-from-export-name.txt
│ │ ├── generate-from-import-name.txt
│ │ ├── generate-func-names.txt
│ │ ├── generate-func-type-names.txt
│ │ ├── generate-global-names.txt
│ │ ├── generate-if-label-names.txt
│ │ ├── generate-import-names.txt
│ │ ├── generate-label-names.txt
│ │ ├── generate-local-names.txt
│ │ ├── generate-some-names.txt
│ │ ├── generate-start-name.txt
│ │ ├── generate-tag-names.txt
│ │ ├── generate-tail-call.txt
│ │ ├── global-index.txt
│ │ ├── inline-export-func-name.txt
│ │ ├── inline-export-func.txt
│ │ ├── inline-export-global.txt
│ │ ├── inline-export-memory.txt
│ │ ├── inline-export-multi.txt
│ │ ├── inline-export-table.txt
│ │ ├── inline-export-tag.txt
│ │ ├── inline-import-export.txt
│ │ ├── inline-import-func.txt
│ │ ├── inline-import-global.txt
│ │ ├── inline-import-memory.txt
│ │ ├── inline-import-table.txt
│ │ ├── inline-import-tag.txt
│ │ ├── invalid-br-var.txt
│ │ ├── invalid-local-index.txt
│ │ ├── label.txt
│ │ ├── memory-index.txt
│ │ ├── memory-index64.txt
│ │ ├── memory-max.txt
│ │ ├── memory-max64.txt
│ │ ├── multi-value-block-type.txt
│ │ ├── named-locals.txt
│ │ ├── named-params.txt
│ │ ├── ref-types.txt
│ │ ├── reference-types.txt
│ │ ├── rethrow.txt
│ │ ├── select-type.txt
│ │ ├── simd.txt
│ │ ├── string-unicode-escape.txt
│ │ ├── table-copy-index.txt
│ │ ├── table-import-externref.txt
│ │ ├── table-index.txt
│ │ ├── table-init-index.txt
│ │ ├── try-delegate.txt
│ │ ├── try-table.txt
│ │ └── typed-func-refs.txt
│ ├── run-c-api-examples.py
│ ├── run-roundtrip.py
│ ├── run-spec-wasm2c.py
│ ├── run-tests.py
│ ├── spec/
│ │ ├── address.txt
│ │ ├── align.txt
│ │ ├── binary-leb128.txt
│ │ ├── binary.txt
│ │ ├── block.txt
│ │ ├── br.txt
│ │ ├── br_if.txt
│ │ ├── br_table.txt
│ │ ├── bulk.txt
│ │ ├── call.txt
│ │ ├── call_indirect.txt
│ │ ├── comments.txt
│ │ ├── const.txt
│ │ ├── conversions.txt
│ │ ├── custom-page-sizes/
│ │ │ ├── custom-page-sizes-invalid.txt
│ │ │ ├── custom-page-sizes.txt
│ │ │ ├── memory_max.txt
│ │ │ └── memory_max_i64.txt
│ │ ├── custom.txt
│ │ ├── data.txt
│ │ ├── elem.txt
│ │ ├── endianness.txt
│ │ ├── exception-handling/
│ │ │ ├── binary.txt
│ │ │ ├── exports.txt
│ │ │ ├── imports.txt
│ │ │ ├── legacy/
│ │ │ │ ├── rethrow.txt
│ │ │ │ ├── throw.txt
│ │ │ │ ├── try_catch.txt
│ │ │ │ └── try_delegate.txt
│ │ │ ├── ref_null.txt
│ │ │ ├── tag.txt
│ │ │ ├── throw.txt
│ │ │ ├── throw_ref.txt
│ │ │ └── try_table.txt
│ │ ├── exports.txt
│ │ ├── extended-const/
│ │ │ ├── data.txt
│ │ │ ├── elem.txt
│ │ │ └── global.txt
│ │ ├── f32.txt
│ │ ├── f32_bitwise.txt
│ │ ├── f32_cmp.txt
│ │ ├── f64.txt
│ │ ├── f64_bitwise.txt
│ │ ├── f64_cmp.txt
│ │ ├── fac.txt
│ │ ├── float_exprs.txt
│ │ ├── float_literals.txt
│ │ ├── float_memory.txt
│ │ ├── float_misc.txt
│ │ ├── forward.txt
│ │ ├── func.txt
│ │ ├── func_ptrs.txt
│ │ ├── function-references/
│ │ │ ├── binary.txt
│ │ │ ├── br_on_non_null.txt
│ │ │ ├── br_on_null.txt
│ │ │ ├── br_table.txt
│ │ │ ├── call_ref.txt
│ │ │ ├── data.txt
│ │ │ ├── elem.txt
│ │ │ ├── func.txt
│ │ │ ├── global.txt
│ │ │ ├── if.txt
│ │ │ ├── linking.txt
│ │ │ ├── local_get.txt
│ │ │ ├── local_init.txt
│ │ │ ├── ref.txt
│ │ │ ├── ref_as_non_null.txt
│ │ │ ├── ref_is_null.txt
│ │ │ ├── ref_null.txt
│ │ │ ├── return_call.txt
│ │ │ ├── return_call_indirect.txt
│ │ │ ├── return_call_ref.txt
│ │ │ ├── select.txt
│ │ │ ├── table-sub.txt
│ │ │ ├── table.txt
│ │ │ ├── type-equivalence.txt
│ │ │ ├── unreached-invalid.txt
│ │ │ └── unreached-valid.txt
│ │ ├── global.txt
│ │ ├── i32.txt
│ │ ├── i64.txt
│ │ ├── if.txt
│ │ ├── imports.txt
│ │ ├── inline-module.txt
│ │ ├── int_exprs.txt
│ │ ├── int_literals.txt
│ │ ├── labels.txt
│ │ ├── left-to-right.txt
│ │ ├── linking.txt
│ │ ├── load.txt
│ │ ├── local_get.txt
│ │ ├── local_set.txt
│ │ ├── local_tee.txt
│ │ ├── loop.txt
│ │ ├── memory.txt
│ │ ├── memory64/
│ │ │ ├── address.txt
│ │ │ ├── address64.txt
│ │ │ ├── align64.txt
│ │ │ ├── binary-leb128.txt
│ │ │ ├── binary.txt
│ │ │ ├── binary0.txt
│ │ │ ├── call_indirect.txt
│ │ │ ├── endianness64.txt
│ │ │ ├── float_memory64.txt
│ │ │ ├── imports.txt
│ │ │ ├── load64.txt
│ │ │ ├── memory.txt
│ │ │ ├── memory64.txt
│ │ │ ├── memory_copy.txt
│ │ │ ├── memory_fill.txt
│ │ │ ├── memory_grow64.txt
│ │ │ ├── memory_init.txt
│ │ │ ├── memory_redundancy64.txt
│ │ │ ├── memory_trap64.txt
│ │ │ ├── simd_address.txt
│ │ │ ├── table.txt
│ │ │ ├── table_copy.txt
│ │ │ ├── table_copy_mixed.txt
│ │ │ ├── table_fill.txt
│ │ │ ├── table_get.txt
│ │ │ ├── table_grow.txt
│ │ │ ├── table_init.txt
│ │ │ ├── table_set.txt
│ │ │ └── table_size.txt
│ │ ├── memory_copy.txt
│ │ ├── memory_fill.txt
│ │ ├── memory_grow.txt
│ │ ├── memory_init.txt
│ │ ├── memory_redundancy.txt
│ │ ├── memory_size.txt
│ │ ├── memory_trap.txt
│ │ ├── multi-memory/
│ │ │ ├── address0.txt
│ │ │ ├── address1.txt
│ │ │ ├── align.txt
│ │ │ ├── align0.txt
│ │ │ ├── binary.txt
│ │ │ ├── binary0.txt
│ │ │ ├── data.txt
│ │ │ ├── data0.txt
│ │ │ ├── data1.txt
│ │ │ ├── data_drop0.txt
│ │ │ ├── exports0.txt
│ │ │ ├── float_exprs0.txt
│ │ │ ├── float_exprs1.txt
│ │ │ ├── float_memory0.txt
│ │ │ ├── imports.txt
│ │ │ ├── imports0.txt
│ │ │ ├── imports1.txt
│ │ │ ├── imports2.txt
│ │ │ ├── imports3.txt
│ │ │ ├── imports4.txt
│ │ │ ├── linking0.txt
│ │ │ ├── linking1.txt
│ │ │ ├── linking2.txt
│ │ │ ├── linking3.txt
│ │ │ ├── load.txt
│ │ │ ├── load0.txt
│ │ │ ├── load1.txt
│ │ │ ├── load2.txt
│ │ │ ├── memory-multi.txt
│ │ │ ├── memory.txt
│ │ │ ├── memory_copy0.txt
│ │ │ ├── memory_copy1.txt
│ │ │ ├── memory_fill0.txt
│ │ │ ├── memory_grow.txt
│ │ │ ├── memory_init0.txt
│ │ │ ├── memory_size.txt
│ │ │ ├── memory_size0.txt
│ │ │ ├── memory_size1.txt
│ │ │ ├── memory_size2.txt
│ │ │ ├── memory_size3.txt
│ │ │ ├── memory_trap0.txt
│ │ │ ├── memory_trap1.txt
│ │ │ ├── simd_memory-multi.txt
│ │ │ ├── start0.txt
│ │ │ ├── store.txt
│ │ │ ├── store0.txt
│ │ │ ├── store1.txt
│ │ │ └── traps0.txt
│ │ ├── names.txt
│ │ ├── nop.txt
│ │ ├── obsolete-keywords.txt
│ │ ├── ref_func.txt
│ │ ├── ref_is_null.txt
│ │ ├── ref_null.txt
│ │ ├── relaxed-simd/
│ │ │ ├── i16x8_relaxed_q15mulr_s.txt
│ │ │ ├── i32x4_relaxed_trunc.txt
│ │ │ ├── i8x16_relaxed_swizzle.txt
│ │ │ ├── relaxed_dot_product.txt
│ │ │ ├── relaxed_laneselect.txt
│ │ │ ├── relaxed_madd_nmadd.txt
│ │ │ └── relaxed_min_max.txt
│ │ ├── return.txt
│ │ ├── select.txt
│ │ ├── simd_address.txt
│ │ ├── simd_align.txt
│ │ ├── simd_bit_shift.txt
│ │ ├── simd_bitwise.txt
│ │ ├── simd_boolean.txt
│ │ ├── simd_const.txt
│ │ ├── simd_conversions.txt
│ │ ├── simd_f32x4.txt
│ │ ├── simd_f32x4_arith.txt
│ │ ├── simd_f32x4_cmp.txt
│ │ ├── simd_f32x4_pmin_pmax.txt
│ │ ├── simd_f32x4_rounding.txt
│ │ ├── simd_f64x2.txt
│ │ ├── simd_f64x2_arith.txt
│ │ ├── simd_f64x2_cmp.txt
│ │ ├── simd_f64x2_pmin_pmax.txt
│ │ ├── simd_f64x2_rounding.txt
│ │ ├── simd_i16x8_arith.txt
│ │ ├── simd_i16x8_arith2.txt
│ │ ├── simd_i16x8_cmp.txt
│ │ ├── simd_i16x8_extadd_pairwise_i8x16.txt
│ │ ├── simd_i16x8_extmul_i8x16.txt
│ │ ├── simd_i16x8_q15mulr_sat_s.txt
│ │ ├── simd_i16x8_sat_arith.txt
│ │ ├── simd_i32x4_arith.txt
│ │ ├── simd_i32x4_arith2.txt
│ │ ├── simd_i32x4_cmp.txt
│ │ ├── simd_i32x4_dot_i16x8.txt
│ │ ├── simd_i32x4_extadd_pairwise_i16x8.txt
│ │ ├── simd_i32x4_extmul_i16x8.txt
│ │ ├── simd_i32x4_trunc_sat_f32x4.txt
│ │ ├── simd_i32x4_trunc_sat_f64x2.txt
│ │ ├── simd_i64x2_arith.txt
│ │ ├── simd_i64x2_arith2.txt
│ │ ├── simd_i64x2_cmp.txt
│ │ ├── simd_i64x2_extmul_i32x4.txt
│ │ ├── simd_i8x16_arith.txt
│ │ ├── simd_i8x16_arith2.txt
│ │ ├── simd_i8x16_cmp.txt
│ │ ├── simd_i8x16_sat_arith.txt
│ │ ├── simd_int_to_int_extend.txt
│ │ ├── simd_lane.txt
│ │ ├── simd_linking.txt
│ │ ├── simd_load.txt
│ │ ├── simd_load16_lane.txt
│ │ ├── simd_load32_lane.txt
│ │ ├── simd_load64_lane.txt
│ │ ├── simd_load8_lane.txt
│ │ ├── simd_load_extend.txt
│ │ ├── simd_load_splat.txt
│ │ ├── simd_load_zero.txt
│ │ ├── simd_splat.txt
│ │ ├── simd_store.txt
│ │ ├── simd_store16_lane.txt
│ │ ├── simd_store32_lane.txt
│ │ ├── simd_store64_lane.txt
│ │ ├── simd_store8_lane.txt
│ │ ├── skip-stack-guard-page.txt
│ │ ├── stack.txt
│ │ ├── start.txt
│ │ ├── store.txt
│ │ ├── switch.txt
│ │ ├── table-sub.txt
│ │ ├── table.txt
│ │ ├── table_copy.txt
│ │ ├── table_fill.txt
│ │ ├── table_get.txt
│ │ ├── table_grow.txt
│ │ ├── table_init.txt
│ │ ├── table_set.txt
│ │ ├── table_size.txt
│ │ ├── tail-call/
│ │ │ ├── return_call.txt
│ │ │ └── return_call_indirect.txt
│ │ ├── token.txt
│ │ ├── traps.txt
│ │ ├── type.txt
│ │ ├── unreachable.txt
│ │ ├── unreached-invalid.txt
│ │ ├── unreached-valid.txt
│ │ ├── unwind.txt
│ │ ├── utf8-custom-section-id.txt
│ │ ├── utf8-import-field.txt
│ │ ├── utf8-import-module.txt
│ │ └── utf8-invalid-encoding.txt
│ ├── spec-new/
│ │ ├── README.md
│ │ ├── wide-arithmetic.txt
│ │ └── wide-arithmetic.wast
│ ├── spec-wasm2c-prefix.c
│ ├── spectest-interp-assert-failure.txt
│ ├── spectest-interp-error-count.txt
│ ├── spectest-interp-invalid-literal.txt
│ ├── stats/
│ │ ├── basic.txt
│ │ ├── cutoff.txt
│ │ └── immediates.txt
│ ├── strip/
│ │ ├── basic.txt
│ │ ├── keep_section.txt
│ │ ├── names.txt
│ │ ├── no-custom-sections.txt
│ │ ├── out_file.txt
│ │ └── remove_section.txt
│ ├── too-many-arguments.txt
│ ├── two-commands.txt
│ ├── typecheck/
│ │ ├── atomic-no-shared-memory.txt
│ │ ├── bad-assertexception-type-mismatch.txt
│ │ ├── bad-assertreturn-invoke-type-mismatch.txt
│ │ ├── bad-assertreturn-type-mismatch.txt
│ │ ├── bad-atomic-type-mismatch.txt
│ │ ├── bad-binary-type-mismatch-1.txt
│ │ ├── bad-binary-type-mismatch-2.txt
│ │ ├── bad-block-multi-mismatch.txt
│ │ ├── bad-brtable-type-mismatch.txt
│ │ ├── bad-bulk-memory-invalid-segment.txt
│ │ ├── bad-bulk-memory-no-memory.txt
│ │ ├── bad-bulk-memory-no-table.txt
│ │ ├── bad-bulk-memory-type-mismatch.txt
│ │ ├── bad-call-result-mismatch.txt
│ │ ├── bad-call-type-mismatch.txt
│ │ ├── bad-callimport-type-mismatch.txt
│ │ ├── bad-callindirect-func-type-mismatch.txt
│ │ ├── bad-callindirect-type-mismatch.txt
│ │ ├── bad-callref-empty.txt
│ │ ├── bad-callref-int32.txt
│ │ ├── bad-callref-nosubtype.txt
│ │ ├── bad-callref-null.txt
│ │ ├── bad-callref-wrong-signature.txt
│ │ ├── bad-cast-type-mismatch.txt
│ │ ├── bad-compare-type-mismatch-1.txt
│ │ ├── bad-compare-type-mismatch-2.txt
│ │ ├── bad-convert-type-mismatch.txt
│ │ ├── bad-delegate-depth.txt
│ │ ├── bad-empty-catch-all.txt
│ │ ├── bad-empty-catch.txt
│ │ ├── bad-expr-if.txt
│ │ ├── bad-function-result-type-mismatch.txt
│ │ ├── bad-global-globalget-type-mismatch.txt
│ │ ├── bad-global-no-init-expr.txt
│ │ ├── bad-global-type-mismatch.txt
│ │ ├── bad-if-condition-type-mismatch.txt
│ │ ├── bad-if-multi-mismatch.txt
│ │ ├── bad-if-type-mismatch.txt
│ │ ├── bad-if-value-void.txt
│ │ ├── bad-invoke-type-mismatch.txt
│ │ ├── bad-load-type-mismatch.txt
│ │ ├── bad-localset-type-mismatch.txt
│ │ ├── bad-loop-multi-mismatch.txt
│ │ ├── bad-memory-grow-type-mismatch.txt
│ │ ├── bad-nested-br.txt
│ │ ├── bad-no-shared-memory.txt
│ │ ├── bad-reference-types-no-table.txt
│ │ ├── bad-rethrow-depth.txt
│ │ ├── bad-rethrow-not-in-catch.txt
│ │ ├── bad-return-type-mismatch.txt
│ │ ├── bad-returncall-type-mismatch.txt
│ │ ├── bad-returncallindirect-no-table.txt
│ │ ├── bad-returncallindirect-type-mismatch.txt
│ │ ├── bad-select-cond.txt
│ │ ├── bad-select-value0.txt
│ │ ├── bad-select-value1.txt
│ │ ├── bad-simd-lane.txt
│ │ ├── bad-store-index-type-mismatch.txt
│ │ ├── bad-tag-results.txt
│ │ ├── bad-typed-select-type-mismatch.txt
│ │ ├── bad-unary-type-mismatch.txt
│ │ ├── br-multi.txt
│ │ ├── br-table-loop.txt
│ │ ├── brif-multi.txt
│ │ ├── brtable-multi.txt
│ │ ├── delegate.txt
│ │ ├── if-anyref.txt
│ │ ├── if-then-br.txt
│ │ ├── if-value.txt
│ │ ├── label-redefinition.txt
│ │ ├── missing-ref.txt
│ │ ├── nested-br.txt
│ │ ├── nocheck.txt
│ │ ├── rethrow.txt
│ │ ├── return-drop-value-2.txt
│ │ ├── return-drop-value.txt
│ │ ├── return-value.txt
│ │ ├── try-delegate.txt
│ │ └── typed-select-result-type.txt
│ ├── update-spec-tests.py
│ ├── utils.py
│ ├── wasi/
│ │ ├── clock.txt
│ │ ├── empty.txt
│ │ ├── exit.txt
│ │ ├── oob_trap.txt
│ │ └── write_stdout.txt
│ ├── wasm2c/
│ │ ├── add.txt
│ │ ├── address-overflow.txt
│ │ ├── bad-enable-feature.txt
│ │ ├── check-imports.txt
│ │ ├── duplicate-names.txt
│ │ ├── export-names.txt
│ │ ├── hello.txt
│ │ ├── minimal.txt
│ │ ├── spec/
│ │ │ ├── address.txt
│ │ │ ├── align.txt
│ │ │ ├── binary-leb128.txt
│ │ │ ├── binary.txt
│ │ │ ├── block.txt
│ │ │ ├── br.txt
│ │ │ ├── br_if.txt
│ │ │ ├── br_table.txt
│ │ │ ├── bulk.txt
│ │ │ ├── call.txt
│ │ │ ├── call_indirect.txt
│ │ │ ├── comments.txt
│ │ │ ├── const.txt
│ │ │ ├── conversions.txt
│ │ │ ├── custom-page-sizes/
│ │ │ │ ├── custom-page-sizes-invalid.txt
│ │ │ │ ├── custom-page-sizes.txt
│ │ │ │ ├── memory_max.txt
│ │ │ │ └── memory_max_i64.txt
│ │ │ ├── custom.txt
│ │ │ ├── data.txt
│ │ │ ├── elem.txt
│ │ │ ├── endianness.txt
│ │ │ ├── exception-handling/
│ │ │ │ ├── binary.txt
│ │ │ │ ├── exports.txt
│ │ │ │ ├── imports.txt
│ │ │ │ ├── legacy/
│ │ │ │ │ ├── rethrow.txt
│ │ │ │ │ ├── throw.txt
│ │ │ │ │ ├── try_catch.txt
│ │ │ │ │ └── try_delegate.txt
│ │ │ │ ├── ref_null.txt
│ │ │ │ ├── tag.txt
│ │ │ │ ├── throw.txt
│ │ │ │ ├── throw_ref.txt
│ │ │ │ └── try_table.txt
│ │ │ ├── exports.txt
│ │ │ ├── extended-const/
│ │ │ │ ├── data.txt
│ │ │ │ ├── elem.txt
│ │ │ │ └── global.txt
│ │ │ ├── f32.txt
│ │ │ ├── f32_bitwise.txt
│ │ │ ├── f32_cmp.txt
│ │ │ ├── f64.txt
│ │ │ ├── f64_bitwise.txt
│ │ │ ├── f64_cmp.txt
│ │ │ ├── fac.txt
│ │ │ ├── float_exprs.txt
│ │ │ ├── float_literals.txt
│ │ │ ├── float_memory.txt
│ │ │ ├── float_misc.txt
│ │ │ ├── forward.txt
│ │ │ ├── func.txt
│ │ │ ├── func_ptrs.txt
│ │ │ ├── global.txt
│ │ │ ├── i32.txt
│ │ │ ├── i64.txt
│ │ │ ├── if.txt
│ │ │ ├── imports.txt
│ │ │ ├── inline-module.txt
│ │ │ ├── int_exprs.txt
│ │ │ ├── int_literals.txt
│ │ │ ├── labels.txt
│ │ │ ├── left-to-right.txt
│ │ │ ├── linking.txt
│ │ │ ├── load.txt
│ │ │ ├── local_get.txt
│ │ │ ├── local_set.txt
│ │ │ ├── local_tee.txt
│ │ │ ├── loop.txt
│ │ │ ├── memory.txt
│ │ │ ├── memory64/
│ │ │ │ ├── address.txt
│ │ │ │ ├── address64.txt
│ │ │ │ ├── align64.txt
│ │ │ │ ├── binary-leb128.txt
│ │ │ │ ├── binary.txt
│ │ │ │ ├── binary0.txt
│ │ │ │ ├── call_indirect.txt
│ │ │ │ ├── endianness64.txt
│ │ │ │ ├── float_memory64.txt
│ │ │ │ ├── imports.txt
│ │ │ │ ├── load64.txt
│ │ │ │ ├── memory.txt
│ │ │ │ ├── memory64.txt
│ │ │ │ ├── memory_copy.txt
│ │ │ │ ├── memory_fill.txt
│ │ │ │ ├── memory_grow64.txt
│ │ │ │ ├── memory_init.txt
│ │ │ │ ├── memory_redundancy64.txt
│ │ │ │ ├── memory_trap64.txt
│ │ │ │ ├── simd_address.txt
│ │ │ │ ├── table.txt
│ │ │ │ ├── table_copy.txt
│ │ │ │ ├── table_copy_mixed.txt
│ │ │ │ ├── table_fill.txt
│ │ │ │ ├── table_get.txt
│ │ │ │ ├── table_grow.txt
│ │ │ │ ├── table_init.txt
│ │ │ │ ├── table_set.txt
│ │ │ │ └── table_size.txt
│ │ │ ├── memory_copy.txt
│ │ │ ├── memory_fill.txt
│ │ │ ├── memory_grow.txt
│ │ │ ├── memory_init.txt
│ │ │ ├── memory_redundancy.txt
│ │ │ ├── memory_size.txt
│ │ │ ├── memory_trap.txt
│ │ │ ├── multi-memory/
│ │ │ │ ├── address0.txt
│ │ │ │ ├── address1.txt
│ │ │ │ ├── align.txt
│ │ │ │ ├── align0.txt
│ │ │ │ ├── binary.txt
│ │ │ │ ├── binary0.txt
│ │ │ │ ├── data.txt
│ │ │ │ ├── data0.txt
│ │ │ │ ├── data1.txt
│ │ │ │ ├── data_drop0.txt
│ │ │ │ ├── exports0.txt
│ │ │ │ ├── float_exprs0.txt
│ │ │ │ ├── float_exprs1.txt
│ │ │ │ ├── float_memory0.txt
│ │ │ │ ├── imports.txt
│ │ │ │ ├── imports0.txt
│ │ │ │ ├── imports1.txt
│ │ │ │ ├── imports2.txt
│ │ │ │ ├── imports3.txt
│ │ │ │ ├── imports4.txt
│ │ │ │ ├── linking0.txt
│ │ │ │ ├── linking1.txt
│ │ │ │ ├── linking2.txt
│ │ │ │ ├── linking3.txt
│ │ │ │ ├── load.txt
│ │ │ │ ├── load0.txt
│ │ │ │ ├── load1.txt
│ │ │ │ ├── load2.txt
│ │ │ │ ├── memory-multi.txt
│ │ │ │ ├── memory.txt
│ │ │ │ ├── memory_copy0.txt
│ │ │ │ ├── memory_copy1.txt
│ │ │ │ ├── memory_fill0.txt
│ │ │ │ ├── memory_grow.txt
│ │ │ │ ├── memory_init0.txt
│ │ │ │ ├── memory_size.txt
│ │ │ │ ├── memory_size0.txt
│ │ │ │ ├── memory_size1.txt
│ │ │ │ ├── memory_size2.txt
│ │ │ │ ├── memory_size3.txt
│ │ │ │ ├── memory_trap0.txt
│ │ │ │ ├── memory_trap1.txt
│ │ │ │ ├── simd_memory-multi.txt
│ │ │ │ ├── start0.txt
│ │ │ │ ├── store.txt
│ │ │ │ ├── store0.txt
│ │ │ │ ├── store1.txt
│ │ │ │ └── traps0.txt
│ │ │ ├── names.txt
│ │ │ ├── nop.txt
│ │ │ ├── obsolete-keywords.txt
│ │ │ ├── ref_func.txt
│ │ │ ├── ref_is_null.txt
│ │ │ ├── ref_null.txt
│ │ │ ├── return.txt
│ │ │ ├── select.txt
│ │ │ ├── simd_address.txt
│ │ │ ├── simd_align.txt
│ │ │ ├── simd_bit_shift.txt
│ │ │ ├── simd_bitwise.txt
│ │ │ ├── simd_boolean.txt
│ │ │ ├── simd_const.txt
│ │ │ ├── simd_conversions.txt
│ │ │ ├── simd_f32x4.txt
│ │ │ ├── simd_f32x4_arith.txt
│ │ │ ├── simd_f32x4_cmp.txt
│ │ │ ├── simd_f32x4_pmin_pmax.txt
│ │ │ ├── simd_f32x4_rounding.txt
│ │ │ ├── simd_f64x2.txt
│ │ │ ├── simd_f64x2_arith.txt
│ │ │ ├── simd_f64x2_cmp.txt
│ │ │ ├── simd_f64x2_pmin_pmax.txt
│ │ │ ├── simd_f64x2_rounding.txt
│ │ │ ├── simd_i16x8_arith.txt
│ │ │ ├── simd_i16x8_arith2.txt
│ │ │ ├── simd_i16x8_cmp.txt
│ │ │ ├── simd_i16x8_extadd_pairwise_i8x16.txt
│ │ │ ├── simd_i16x8_extmul_i8x16.txt
│ │ │ ├── simd_i16x8_q15mulr_sat_s.txt
│ │ │ ├── simd_i16x8_sat_arith.txt
│ │ │ ├── simd_i32x4_arith.txt
│ │ │ ├── simd_i32x4_arith2.txt
│ │ │ ├── simd_i32x4_cmp.txt
│ │ │ ├── simd_i32x4_dot_i16x8.txt
│ │ │ ├── simd_i32x4_extadd_pairwise_i16x8.txt
│ │ │ ├── simd_i32x4_extmul_i16x8.txt
│ │ │ ├── simd_i32x4_trunc_sat_f32x4.txt
│ │ │ ├── simd_i32x4_trunc_sat_f64x2.txt
│ │ │ ├── simd_i64x2_arith.txt
│ │ │ ├── simd_i64x2_arith2.txt
│ │ │ ├── simd_i64x2_cmp.txt
│ │ │ ├── simd_i64x2_extmul_i32x4.txt
│ │ │ ├── simd_i8x16_arith.txt
│ │ │ ├── simd_i8x16_arith2.txt
│ │ │ ├── simd_i8x16_cmp.txt
│ │ │ ├── simd_i8x16_sat_arith.txt
│ │ │ ├── simd_int_to_int_extend.txt
│ │ │ ├── simd_lane.txt
│ │ │ ├── simd_linking.txt
│ │ │ ├── simd_load.txt
│ │ │ ├── simd_load16_lane.txt
│ │ │ ├── simd_load32_lane.txt
│ │ │ ├── simd_load64_lane.txt
│ │ │ ├── simd_load8_lane.txt
│ │ │ ├── simd_load_extend.txt
│ │ │ ├── simd_load_splat.txt
│ │ │ ├── simd_load_zero.txt
│ │ │ ├── simd_splat.txt
│ │ │ ├── simd_store.txt
│ │ │ ├── simd_store16_lane.txt
│ │ │ ├── simd_store32_lane.txt
│ │ │ ├── simd_store64_lane.txt
│ │ │ ├── simd_store8_lane.txt
│ │ │ ├── skip-stack-guard-page.txt
│ │ │ ├── stack.txt
│ │ │ ├── start.txt
│ │ │ ├── store.txt
│ │ │ ├── switch.txt
│ │ │ ├── table-sub.txt
│ │ │ ├── table.txt
│ │ │ ├── table_copy.txt
│ │ │ ├── table_fill.txt
│ │ │ ├── table_get.txt
│ │ │ ├── table_grow.txt
│ │ │ ├── table_init.txt
│ │ │ ├── table_set.txt
│ │ │ ├── table_size.txt
│ │ │ ├── tail-call/
│ │ │ │ ├── return_call.txt
│ │ │ │ └── return_call_indirect.txt
│ │ │ ├── threads/
│ │ │ │ └── atomic.txt
│ │ │ ├── token.txt
│ │ │ ├── traps.txt
│ │ │ ├── type.txt
│ │ │ ├── unreachable.txt
│ │ │ ├── unreached-invalid.txt
│ │ │ ├── unreached-valid.txt
│ │ │ ├── unwind.txt
│ │ │ ├── utf8-custom-section-id.txt
│ │ │ ├── utf8-import-field.txt
│ │ │ ├── utf8-import-module.txt
│ │ │ └── utf8-invalid-encoding.txt
│ │ ├── spec-multi-output/
│ │ │ ├── call.txt
│ │ │ ├── linking.txt
│ │ │ └── memory_init.txt
│ │ └── tail-calls.txt
│ ├── wast2json/
│ │ ├── module-binary.txt
│ │ └── test-invalid-quoted-modules.txt
│ └── wat2wasm_stdout.txt
├── ubsan.blacklist
└── wasm2c/
├── .gitignore
├── README.md
├── examples/
│ ├── callback/
│ │ ├── Makefile
│ │ ├── callback.wat
│ │ └── main.c
│ ├── fac/
│ │ ├── Makefile
│ │ ├── fac.c
│ │ ├── fac.h
│ │ ├── fac.wat
│ │ └── main.c
│ ├── rot13/
│ │ ├── Makefile
│ │ ├── main.c
│ │ └── rot13.wat
│ └── threads/
│ ├── Makefile
│ ├── sample.wat
│ └── threads.c
├── wasm-rt-exceptions-impl.c
├── wasm-rt-exceptions.h
├── wasm-rt-impl-tableops.inc
├── wasm-rt-impl.c
├── wasm-rt-impl.h
├── wasm-rt-mem-impl-helper.inc
├── wasm-rt-mem-impl.c
└── wasm-rt.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
BasedOnStyle: Chromium
================================================
FILE: .flake8
================================================
[flake8]
# E501: line too long
# W504: line break after binary operator
ignore = E501,W504
exclude = ./third_party ./out
================================================
FILE: .git-blame-ignore-revs
================================================
# This file contains a list of commits that are not likely what you
# are looking for in a blame, such as mass reformatting or renaming.
# You can set this file as a default ignore file for blame by running
# the following command.
#
# $ git config blame.ignoreRevsFile .git-blame-ignore-revs
# Clang-format codebase
e59cf9369004a521814222afbc05ae6b59446cd5
================================================
FILE: .gitattributes
================================================
* text=auto
*.c text
*.h text
*.js text
*.l text
*.md text
*.py text
*.rst text
*.sh text
*.txt text
*.y text
docs/demo/primer.css binary
docs/demo/libwabt.js binary
docs/demo/third_party/codemirror/codemirror.css binary
docs/demo/third_party/codemirror/codemirror.js binary
# Mark these tests as binary so git doesn't change the line endings:
test/parse/bad-crlf.txt binary
test/parse/bad-string-eof.txt binary
test/regress/regress-31.txt binary
test/regress/bad-annotation* binary
test/regress/unterminated-annotation* binary
# Highlight tests like .wast files when displayed on GitHub.
test/**/*.txt linguist-language=WebAssembly
# Mark test-files as "vendored". This tells GitHub to exclude them when it
# calculates the repository's languages summary, and preserves the current
# classification as a C++ project. See https://git.io/vr2pO
test/**/*.txt linguist-vendored
================================================
FILE: .github/actions/release-archive/action.yml
================================================
name: Upload release archive
description: Bundles an archive of artifacts and uploads to a GitHub release. The artifacts must already have been built into the folder "install".
inputs:
os:
description: The OS runner name being built, used in the archive name
required: true
upload_to_release:
description: Whether to upload the archives to the release
runs:
using: composite
steps:
- name: archive
id: archive
shell: bash
run: |
OSNAME=$(echo ${{ inputs.os }} | sed 's/-latest//')
VERSION=${{ github.event.release.tag_name || github.sha }}
PKGNAME="wabt-$VERSION-$OSNAME"
TARBALL=$PKGNAME.tar.gz
SHASUM=$PKGNAME.tar.gz.sha256
mv install wabt-$VERSION
tar -czf $TARBALL wabt-$VERSION
scripts/sha256sum.py $TARBALL > $SHASUM
echo "tarball=$TARBALL" >> $GITHUB_OUTPUT
echo "shasum=$SHASUM" >> $GITHUB_OUTPUT
- name: upload tarball to CI
uses: actions/upload-artifact@v4
with:
name: ${{ steps.archive.outputs.tarball }}
path: ./${{ steps.archive.outputs.tarball }}
- name: upload tarball to release
uses: svenstaro/upload-release-action@v2
if: ${{ inputs.upload_to_release }}
with:
file: ./${{ steps.archive.outputs.tarball }}
asset_name: ${{ steps.archive.outputs.tarball }}
tag: ${{ github.ref }}
- name: upload shasum
uses: svenstaro/upload-release-action@v2
if: ${{ inputs.upload_to_release }}
with:
file: ./${{ steps.archive.outputs.shasum }}
asset_name: ${{ steps.archive.outputs.shasum }}
tag: ${{ github.ref }}
================================================
FILE: .github/workflows/build.yml
================================================
name: CI
on:
create:
tags:
push:
branches:
- main
pull_request:
jobs:
lint:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v1
with:
python-version: '3.x'
- uses: actions/checkout@v1
- name: install tools
run: |
pip3 install flake8==7.3.0
sudo apt-get install clang-format
- run: flake8
- run: ./scripts/clang-format-diff.sh
env:
GITHUB_EVENT_BEFORE: ${{ github.event.before }}
build:
name: build
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- uses: actions/checkout@v1
with:
submodules: true
- name: install ninja (linux)
run: sudo apt-get install ninja-build
if: matrix.os == 'ubuntu-latest'
- name: install ninja (osx)
run: brew install ninja
if: matrix.os == 'macos-latest'
- name: install ninja (win)
run: choco install ninja
if: matrix.os == 'windows-latest'
- name: mkdir
run: mkdir -p out
- name: tool versions
run: |
cmake --version
ninja --version
- name: cmake
run: cmake .. -G Ninja -DWERROR=ON -Werror=dev -DCMAKE_ERROR_DEPRECATED=OFF
working-directory: out
if: matrix.os != 'windows-latest'
- name: cmake (windows)
run: cmake .. -DWERROR=ON -Werror=dev -DCMAKE_ERROR_DEPRECATED=OFF
working-directory: out
if: matrix.os == 'windows-latest'
- name: build
run: cmake --build out
- name: check if generated files are up-to-date
run: python ./scripts/check_clean.py
- name: unittests
run: cmake --build out --target run-unittests
- name: c-api-tests
run: cmake --build out --target run-c-api-tests
- name: tests
run: cmake --build out --target run-tests
emscripten:
name: emscripten
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
with:
submodules: true
- name: build
run: |
docker run -di --name emscripten -v $(pwd):/src emscripten/emsdk:latest bash
docker exec emscripten emcc -v
docker exec emscripten emcmake cmake -B emscripten -DWERROR=ON
docker exec -w /src/emscripten emscripten make -j $(nproc)
wasi:
name: wasi
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: build-tools
run: |
docker run -di --name wasi-sdk -v $(pwd):/src --workdir /src ghcr.io/webassembly/wasi-sdk:wasi-sdk-20 bash
docker exec wasi-sdk cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DBUILD_TESTS=0 -DBUILD_LIBWASM=0
docker exec wasi-sdk cmake --build out --config Release --target install
- uses: ./.github/actions/release-archive
with:
os: wasi
sanitize:
name: sanitize
runs-on: ubuntu-24.04
env:
USE_NINJA: "1"
CC: "clang"
WASM2C_CFLAGS: "-march=x86-64-v2" # currently required for SIMDe to pass some tests on x86-64
strategy:
matrix:
sanitizer: [asan, ubsan, fuzz]
type: [debug, release]
steps:
- uses: actions/setup-python@v1
with:
python-version: '3.x'
- uses: actions/checkout@v1
with:
submodules: true
- run: sudo apt-get install ninja-build
- name: workaround for ASLR+ASAN compatibility # See https://github.com/actions/runner/issues/3207
run: sudo sysctl -w vm.mmap_rnd_bits=28
- run: make clang-${{ matrix.type }}-${{ matrix.sanitizer }}
- if: ${{ matrix.sanitizer }} != fuzz
run: make test-clang-${{ matrix.type }}-${{ matrix.sanitizer }}
build-wasm2c-memchecked:
name: wasm2c-memchecked
runs-on: ubuntu-latest
env:
USE_NINJA: "1"
CC: "clang" # used by the wasm2c tests
WASM2C_CFLAGS: "-march=x86-64-v2 -fsanitize=address -DWASM_RT_USE_MMAP=0"
steps:
- uses: actions/setup-python@v1
with:
python-version: '3.x'
- uses: actions/checkout@v1
with:
submodules: true
- run: sudo apt-get install ninja-build
- name: workaround for ASLR+ASAN compatibility # See https://github.com/actions/runner/issues/3207
run: sudo sysctl -w vm.mmap_rnd_bits=28
- run: make clang-debug-asan
- run: make test-clang-debug-asan
build-min-cmake:
name: min-cmake
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
with:
submodules: true
- uses: actions/setup-python@v1
with:
python-version: '3.x'
- name: Install Ninja
run: sudo apt-get install ninja-build
- name: Detect minimum CMake version
run: >
awk 'match($0, /cmake_minimum_required\(VERSION *([0-9]+\.[0-9]+)\)/, a)
{ print "WABT_CMAKE_VER=" a[1]; exit; }' CMakeLists.txt | tee $GITHUB_ENV
- name: Install minimum CMake
run: |
python -m pip install -U setuptools wheel pip
python -m pip install "cmake==${WABT_CMAKE_VER}.*"
cmake --version
- name: configure (OpenSSL)
run: cmake -G Ninja -S . -B out -DCMAKE_BUILD_TYPE=Release
- name: build (OpenSSL)
run: cmake --build out
- name: install (OpenSSL)
run: cmake --install out --prefix install
- name: configure (PicoSHA2)
run: cmake -G Ninja -S . -B out-picosha -DCMAKE_BUILD_TYPE=Release -DUSE_INTERNAL_SHA256=ON
- name: build (PicoSHA2)
run: cmake --build out-picosha
- name: install (PicoSHA2)
run: cmake --install out-picosha --prefix install-picosha
- name: test CMake package (OpenSSL)
run: >
ctest --build-and-test scripts/example-project example-openssl
--build-generator Ninja
--build-options -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$PWD/install
--test-command ctest
- name: test CMake package (PicoSHA2)
run: >
ctest --build-and-test scripts/example-project example-picosha
--build-generator Ninja
--build-options -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$PWD/install-picosha
--test-command ctest
- name: unittests
run: cmake --build out --target run-unittests
- name: c-api-tests
run: cmake --build out --target run-c-api-tests
- name: tests
run: cmake --build out --target run-tests
build-rlbox:
name: rlbox
runs-on: ubuntu-latest
env:
USE_NINJA: "1"
WASM2C_CC: "clang"
WASM2C_CFLAGS: "-DWASM_RT_USE_MMAP=1 -DWASM_RT_SKIP_SIGNAL_RECOVERY=1 -DWASM_RT_NONCONFORMING_UNCHECKED_STACK_EXHAUSTION=1 -DWASM2C_TEST_EMBEDDER_SIGNAL_HANDLING -DWASM_RT_ALLOW_SEGUE=1 -DWASM_RT_SEGUE_FREE_SEGMENT=1 -mfsgsbase -DWASM_RT_SANITY_CHECKS=1 -Wno-pass-failed"
steps:
- uses: actions/setup-python@v1
with:
python-version: '3.x'
- uses: actions/checkout@v1
with:
submodules: true
- run: sudo apt-get install ninja-build
- run: make clang-debug
- name: tests (wasm2c tests excluding memory64)
run: ./test/run-tests.py wasm2c --exclude-dir memory64
build-cross:
runs-on: ubuntu-latest
# Temporatily disabled until we can get it fixed:
# https://github.com/WebAssembly/wabt/issues/2655
if: ${{ false }}
strategy:
fail-fast: false
matrix:
arch: [s390x]
services: # still faster on debian...
distcc:
image: debian:latest
options: --health-cmd distccmon-text --health-interval 5s --health-start-period 5m debian:latest bash -c "apt-get update && apt-get install -y g++-s390x-linux-gnu distcc && distccd --daemon --no-detach"
ports:
- 3632:3632
env:
QEMU_LD_PREFIX: /usr/${{matrix.arch}}-linux-gnu/
steps:
- uses: actions/setup-python@v1
with:
python-version: '3.x'
- uses: actions/checkout@v1
with:
submodules: true
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
with:
platforms: ${{matrix.arch}}
image: "tonistiigi/binfmt:master"
- name: apt-get update
run: sudo apt-get update
- name: install ninja
run: sudo apt-get install ninja-build
- name: install the toolchain
run: sudo apt-get install g++-${{matrix.arch}}-linux-gnu
- name: install distcc
run: sudo apt-get install distcc
- name: mkdir distcc symlinks
run: sudo mkdir -p /opt/bin/distcc_symlinks
- name: distcc symlink
run: sudo ln -s /usr/bin/distcc /opt/bin/distcc_symlinks/${{matrix.arch}}-linux-gnu-gcc # only CC is needed
- name: cmake
run: cmake -S . -B out -G Ninja -DCMAKE_TOOLCHAIN_FILE=../scripts/TC-${{matrix.arch}}.cmake -DWERROR=OFF -Werror=dev -DCMAKE_ERROR_DEPRECATED=OFF
- name: build
run: cmake --build out
- name: check if generated files are up-to-date
run: python ./scripts/check_clean.py
- name: unittests
run: cmake --build out --target run-unittests
- name: tests
run: cmake --build out --target run-tests
================================================
FILE: .github/workflows/build_release.yml
================================================
name: Build Release
# Trigger whenever a release is created
on:
release:
types:
- created
permissions:
contents: write
jobs:
build:
name: build
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
arch: x86_64
name: linux-x64
- os: ubuntu-22.04-arm
arch: aarch64
name: linux-arm64
- os: macos-14
arch: aarch64
name: macos-arm64
- os: windows-latest
arch: x86_64
name: windows-x64
defaults:
run:
shell: bash
steps:
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- uses: actions/checkout@v1
with:
submodules: true
- name: install ninja (linux)
run: sudo apt-get install ninja-build
if: contains(matrix.os, 'ubuntu')
- name: install ninja (osx)
run: brew install ninja
if: matrix.os == 'macos-14'
- name: install ninja (win)
run: choco install ninja
if: matrix.os == 'windows-latest'
- name: mkdir
run: mkdir -p out
- name: cmake (unix)
run: cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install
if: matrix.os != 'windows-latest'
- name: cmake (win)
# -G "Visual Studio 15 2017"
run: cmake -S . -B out -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install
if: matrix.os == 'windows-latest'
- name: build
run: cmake --build out --config Release --target install
- name: strip
run: find bin/ -type f -perm -u=x -exec strip {} +
if: matrix.os != 'windows-latest'
- uses: ./.github/actions/release-archive
with:
os: ${{ matrix.name }}
upload_to_release: true
build-wasi:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: built-tools
run: |
docker run -di --name wasi-sdk -v $(pwd):/src --workdir /src ghcr.io/webassembly/wasi-sdk:wasi-sdk-20 bash
docker exec wasi-sdk cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DBUILD_TESTS=0 -DBUILD_LIBWASM=0
docker exec wasi-sdk cmake --build out --config Release --target install
- uses: ./.github/actions/release-archive
with:
os: wasi
upload_to_release: true
================================================
FILE: .github/workflows/build_source_release.yml
================================================
name: Build Source Release
# Trigger whenever a release is created
on:
release:
types:
- created
permissions:
contents: write
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v1
with:
python-version: '3.x'
- uses: actions/checkout@v1
with:
submodules: true
- name: archive
id: archive
run: |
VERSION=${{ github.event.release.tag_name }}
PKGNAME="wabt-$VERSION"
mkdir -p /tmp/$PKGNAME
mv * /tmp/$PKGNAME
mv /tmp/$PKGNAME .
TARBALL=$PKGNAME.tar.xz
SHASUM=$PKGNAME.tar.xz.sha256
tar cJf $TARBALL $PKGNAME
$PKGNAME/scripts/sha256sum.py $TARBALL > $SHASUM
echo "::set-output name=tarball::$TARBALL"
echo "::set-output name=shasum::$SHASUM"
- name: upload tarball
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ./${{ steps.archive.outputs.tarball }}
asset_name: ${{ steps.archive.outputs.tarball }}
tag: ${{ github.ref }}
- name: upload shasum
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ./${{ steps.archive.outputs.shasum }}
asset_name: ${{ steps.archive.outputs.shasum }}
tag: ${{ github.ref }}
================================================
FILE: .github/workflows/wabt-cifuzz.yml
================================================
name: CIFuzz
on: [pull_request]
jobs:
Fuzzing:
runs-on: ubuntu-latest
steps:
- name: Build Fuzzers
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
oss-fuzz-project-name: 'wabt'
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'wabt'
fuzz-seconds: 300
- name: Upload Crash
uses: actions/upload-artifact@v4
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
path: ./out/artifacts
================================================
FILE: .gitignore
================================================
/bin
/build
/out
/fuzz-out
/emscripten
*.pyc
.idea/
.vscode/
/cmake-build-debug/
================================================
FILE: .gitmodules
================================================
[submodule "third_party/testsuite"]
path = third_party/testsuite
url = https://github.com/WebAssembly/testsuite
[submodule "third_party/gtest"]
path = third_party/gtest
url = https://github.com/google/googletest
[submodule "third_party/ply"]
path = third_party/ply
url = https://github.com/dabeaz/ply
[submodule "third_party/wasm-c-api"]
path = third_party/wasm-c-api
url = https://github.com/WebAssembly/wasm-c-api
[submodule "third_party/uvwasi"]
path = third_party/uvwasi
url = https://github.com/nodejs/uvwasi
[submodule "third_party/picosha2"]
path = third_party/picosha2
url = https://github.com/okdshin/PicoSHA2
[submodule "third_party/simde"]
path = third_party/simde
url = https://github.com/simd-everywhere/simde
================================================
FILE: .style.yapf
================================================
[style]
split_before_named_assigns = False
based_on_style = chromium
column_limit = 79
================================================
FILE: CMakeLists.txt
================================================
#
# Copyright 2016 WebAssembly Community Group participants
#
# 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.
#
cmake_minimum_required(VERSION 3.16)
project(WABT LANGUAGES C CXX VERSION 1.0.40)
include(GNUInstallDirs)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# 10.13 doesn't support std::optional::value (becuase it depends on
# std::bad_optional_acces).
# See: https://github.com/WebAssembly/wabt/issues/2527
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "Minimum OS X deployment version")
# Check if wabt is being used directly or via add_subdirectory, FetchContent, etc
string(COMPARE EQUAL "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}" PROJECT_IS_TOP_LEVEL)
# By default use the project version as the version string
set(WABT_VERSION_STRING "${PROJECT_VERSION}")
# For git users, attempt to generate a more useful version string
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
find_package(Git)
if (Git_FOUND)
execute_process(
COMMAND "${GIT_EXECUTABLE}" -C "${WABT_SOURCE_DIR}" describe --tags
RESULT_VARIABLE GIT_VERSION_RESULT
ERROR_VARIABLE GIT_VERSION_ERROR
ERROR_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (GIT_VERSION_RESULT EQUAL 0)
# If we're actually on the tag for this version, don't add the commit description
if (NOT GIT_VERSION STREQUAL "${WABT_VERSION_STRING}")
string(APPEND WABT_VERSION_STRING " (git~${GIT_VERSION})")
endif ()
elseif (PROJECT_IS_TOP_LEVEL)
message(NOTICE "git: ${GIT_VERSION_ERROR}\n ** Did you forget to run `git fetch --tags`?")
endif ()
endif ()
endif ()
option(BUILD_TESTS "Build GTest-based tests" ON)
option(USE_SYSTEM_GTEST "Use system GTest, instead of building" OFF)
option(BUILD_TOOLS "Build wabt commandline tools" ON)
option(BUILD_FUZZ_TOOLS "Build tools that can repro fuzz bugs" OFF)
option(BUILD_LIBWASM "Build libwasm" ON)
option(USE_ASAN "Use address sanitizer" OFF)
option(USE_MSAN "Use memory sanitizer" OFF)
option(USE_LSAN "Use leak sanitizer" OFF)
option(USE_UBSAN "Use undefined behavior sanitizer" OFF)
option(CODE_COVERAGE "Build with code coverage enabled" OFF)
option(WITH_EXCEPTIONS "Build with exceptions enabled" OFF)
option(WERROR "Build with warnings as errors" OFF)
option(WABT_INSTALL_RULES "Include WABT's install() rules" "${PROJECT_IS_TOP_LEVEL}")
# WASI support is still a work in progress.
# Only a handful of syscalls are supported at this point.
option(WITH_WASI "Build WASI support via uvwasi" OFF)
option(USE_INTERNAL_SHA256 "Use internal PicoSHA2 for SHA-256 support instead of OpenSSL libcrypto" OFF)
if (MSVC)
set(COMPILER_IS_CLANG 0)
set(COMPILER_IS_GNU 0)
set(COMPILER_IS_MSVC 1)
elseif (CMAKE_C_COMPILER_ID MATCHES "Clang")
set(COMPILER_IS_CLANG 1)
set(COMPILER_IS_GNU 0)
set(COMPILER_IS_MSVC 0)
elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU")
set(COMPILER_IS_CLANG 0)
set(COMPILER_IS_GNU 1)
set(COMPILER_IS_MSVC 0)
elseif (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
set(COMPILER_IS_CLANG 1)
set(COMPILER_IS_GNU 0)
set(COMPILER_IS_MSVC 0)
else ()
set(COMPILER_IS_CLANG 0)
set(COMPILER_IS_GNU 0)
set(COMPILER_IS_MSVC 0)
endif ()
include(CheckIncludeFile)
include(CheckSymbolExists)
check_include_file("alloca.h" HAVE_ALLOCA_H)
check_include_file("unistd.h" HAVE_UNISTD_H)
check_include_file("setjmp.h" HAVE_SETJMP_H)
check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF)
check_symbol_exists(strcasecmp "strings.h" HAVE_STRCASECMP)
if (NOT USE_INTERNAL_SHA256)
find_package(OpenSSL QUIET)
if (OpenSSL_FOUND)
set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
check_include_file("openssl/sha.h" HAVE_OPENSSL_SHA_H)
if (HAVE_OPENSSL_SHA_H)
find_package_message(OpenSSL "Using OpenSSL libcrypto for SHA-256" "${HAVE_OPENSSL_SHA_H}")
endif()
endif()
endif()
if (WIN32)
if(${CMAKE_GENERATOR_PLATFORM} MATCHES "ARM64")
# https://discourse.cmake.org/t/visual-studio-error-unable-to-deploy-local-file-c-x64-release-zero-check/2072
# Target ZERO_CHECK blocks remote debugger of ARM64 in Visual Studio
set(CMAKE_SUPPRESS_REGENERATION ON)
endif()
check_symbol_exists(ENABLE_VIRTUAL_TERMINAL_PROCESSING "windows.h" HAVE_WIN32_VT100)
endif ()
include(CheckTypeSize)
check_type_size(ssize_t SSIZE_T)
check_type_size(size_t SIZEOF_SIZE_T)
include(TestBigEndian) # Note: deprecated in CMake 3.20
test_big_endian(WABT_BIG_ENDIAN)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(WABT_DEBUG 1)
endif ()
configure_file(src/config.h.in include/wabt/config.h @ONLY)
if (COMPILER_IS_MSVC)
if (WERROR)
add_definitions(-WX)
endif ()
# disable warning C4018: signed/unsigned mismatch
# disable warning C4056, C4756: overflow in floating-point constant arithmetic
# seems to not like float compare w/ HUGE_VALF; bug?
# disable warnings C4267 and C4244: conversion/truncation from larger to smaller type.
# disable warning C4800: implicit conversion from larger int to bool
add_definitions(-W3 -wd4018 -wd4056 -wd4756 -wd4267 -wd4244 -wd4800 -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS)
if (NOT WITH_EXCEPTIONS)
# disable exception use in C++ library
add_definitions(-D_HAS_EXCEPTIONS=0)
endif ()
# multi-core build.
add_definitions("/MP")
else ()
if (WERROR)
add_definitions(-Werror)
endif ()
# disable -Wunused-parameter: this is really common when implementing
# interfaces, etc.
# disable -Wpointer-arith: this is a GCC extension, and doesn't work in MSVC.
add_definitions(
-Wall -Wextra -Wno-unused-parameter -Wpointer-arith -Wuninitialized -Wimplicit-fallthrough
)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wold-style-cast")
if (NOT WITH_EXCEPTIONS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
endif ()
# Need to define __STDC_*_MACROS because C99 specifies that C++ shouldn't
# define format (e.g. PRIu64) or limit (e.g. UINT32_MAX) macros without the
# definition, and some libcs (e.g. glibc2.17 and earlier) follow that.
add_definitions(-D__STDC_LIMIT_MACROS=1 -D__STDC_FORMAT_MACROS=1)
if (MINGW OR CYGWIN)
# On MINGW, _POSIX_C_SOURCE is needed to ensure we use mingw printf
# instead of the VC runtime one.
add_definitions(-D_POSIX_C_SOURCE=200809L)
endif()
if (COMPILER_IS_GNU)
# disable -Wclobbered: it seems to be guessing incorrectly about a local
# variable being clobbered by longjmp.
add_definitions(-Wno-clobbered)
endif ()
# wasm doesn't allow for x87 floating point math
if (NOT EMSCRIPTEN)
check_symbol_exists(__i386__ "" TARGET_IS_X86_32)
check_symbol_exists(__SSE2_MATH__ "" HAVE_SSE2_MATH)
if (TARGET_IS_X86_32 AND NOT HAVE_SSE2_MATH)
if (COMPILER_IS_GNU OR COMPILER_IS_CLANG)
add_compile_options(-msse2 -mfpmath=sse)
else ()
message(
WARNING
"Unknown compiler ${CMAKE_CXX_COMPILER_ID} appears to target x86-32 with x87 "
"math. If you want wasm2c to work in a spec-compliant way, please add flags to "
"use SSE2 math and set TARGET_IS_X86_32 and HAVE_SSE2_MATH appropriately at the "
"CMake command line."
)
endif ()
endif ()
endif ()
endif ()
set(USE_SANITIZER FALSE)
function(sanitizer NAME FLAGS)
if (${NAME})
if (USE_SANITIZER)
message(FATAL_ERROR "Only one sanitizer allowed")
endif ()
set(USE_SANITIZER TRUE PARENT_SCOPE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}" PARENT_SCOPE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}" PARENT_SCOPE)
set(WASM2C_CFLAGS "${WASM2C_CFLAGS} ${FLAGS}" PARENT_SCOPE)
endif ()
endfunction()
sanitizer(USE_ASAN "-fsanitize=address")
sanitizer(USE_MSAN "-fsanitize=memory")
sanitizer(USE_LSAN "-fsanitize=leak")
if (USE_UBSAN)
# -fno-sanitize-recover was deprecated, see if we are compiling with a newer
# clang that requires -fno-sanitize-recover=all.
set(UBSAN_BLACKLIST ${WABT_SOURCE_DIR}/ubsan.blacklist)
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag("-fsanitize=undefined -fno-sanitize-recover -Wall -Werror" HAS_UBSAN_RECOVER_BARE)
if (HAS_UBSAN_RECOVER_BARE)
sanitizer(USE_UBSAN "-fsanitize=undefined -fno-sanitize-recover -fsanitize-blacklist=${UBSAN_BLACKLIST}")
endif ()
check_cxx_compiler_flag("-fsanitize=undefined -fno-sanitize-recover=all -Wall -Werror" HAS_UBSAN_RECOVER_ALL)
# If we already setup UBSAN recover bare, setting it up again here will be an error.
if (NOT USE_SANITIZER AND HAS_UBSAN_RECOVER_ALL)
sanitizer(USE_UBSAN "-fsanitize=undefined -fno-sanitize-recover=all -fsanitize-blacklist=${UBSAN_BLACKLIST}")
endif ()
if (NOT USE_SANITIZER)
message(FATAL_ERROR "UBSAN is not supported")
endif ()
endif ()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${WABT_SOURCE_DIR}/cmake)
# CWriter code templates
set(TEMPLATE_CMAKE ${WABT_SOURCE_DIR}/scripts/gen-wasm2c-templates.cmake)
add_custom_command(
OUTPUT gen-wasm2c-prebuilt
COMMAND ${CMAKE_COMMAND} -D out="${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_header_top.cc" -D in="${WABT_SOURCE_DIR}/src/template/wasm2c.top.h" -D symbol="s_header_top" -P ${TEMPLATE_CMAKE}
COMMAND ${CMAKE_COMMAND} -D out="${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_header_bottom.cc" -D in="${WABT_SOURCE_DIR}/src/template/wasm2c.bottom.h" -D symbol="s_header_bottom" -P ${TEMPLATE_CMAKE}
COMMAND ${CMAKE_COMMAND} -D out="${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_source_includes.cc" -D in="${WABT_SOURCE_DIR}/src/template/wasm2c.includes.c" -D symbol="s_source_includes" -P ${TEMPLATE_CMAKE}
COMMAND ${CMAKE_COMMAND} -D out="${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_source_declarations.cc" -D in="${WABT_SOURCE_DIR}/src/template/wasm2c.declarations.c" -D symbol="s_source_declarations" -P ${TEMPLATE_CMAKE}
COMMAND ${CMAKE_COMMAND} -D out="${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_simd_source_declarations.cc" -D in="${WABT_SOURCE_DIR}/src/template/wasm2c_simd.declarations.c" -D symbol="s_simd_source_declarations" -P ${TEMPLATE_CMAKE}
COMMAND ${CMAKE_COMMAND} -D out="${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_atomicops_source_declarations.cc" -D in="${WABT_SOURCE_DIR}/src/template/wasm2c_atomicops.declarations.c" -D symbol="s_atomicops_source_declarations" -P ${TEMPLATE_CMAKE}
COMMAND ${CMAKE_COMMAND} -E touch gen-wasm2c-prebuilt
DEPENDS ${WABT_SOURCE_DIR}/src/template/wasm2c.top.h
${WABT_SOURCE_DIR}/src/template/wasm2c.bottom.h
${WABT_SOURCE_DIR}/src/template/wasm2c.includes.c
${WABT_SOURCE_DIR}/src/template/wasm2c.declarations.c
${WABT_SOURCE_DIR}/src/template/wasm2c_simd.declarations.c
${WABT_SOURCE_DIR}/src/template/wasm2c_atomicops.declarations.c
)
add_custom_target(gen-wasm2c-prebuilt-target DEPENDS gen-wasm2c-prebuilt)
set(CWRITER_TEMPLATE_SRC ${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_header_top.cc
${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_header_bottom.cc
${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_source_includes.cc
${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_source_declarations.cc
${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_simd_source_declarations.cc
${WABT_SOURCE_DIR}/src/prebuilt/wasm2c_atomicops_source_declarations.cc)
add_custom_target(everything)
set(WABT_LIBRARY_CC
src/apply-names.cc
src/binary-reader-ir.cc
src/binary-reader-logging.cc
src/binary-reader.cc
src/binary-writer-spec.cc
src/binary-writer.cc
src/binary.cc
src/binding-hash.cc
src/color.cc
src/common.cc
src/config.cc
src/config.h.in
src/decompiler.cc
src/error-formatter.cc
src/expr-visitor.cc
src/feature.cc
src/filenames.cc
src/generate-names.cc
src/ir-util.cc
src/ir.cc
src/leb128.cc
src/lexer-source-line-finder.cc
src/lexer-source.cc
src/literal.cc
src/opcode-code-table.c
src/opcode.cc
src/option-parser.cc
src/resolve-names.cc
src/sha256.cc
src/shared-validator.cc
src/stream.cc
src/token.cc
src/tracing.cc
src/type-checker.cc
src/utf8.cc
src/validator.cc
src/wast-lexer.cc
src/wast-parser.cc
src/wat-writer.cc
src/c-writer.cc
${CWRITER_TEMPLATE_SRC}
# TODO(binji): Move this into its own library?
src/interp/binary-reader-interp.cc
src/interp/interp.cc
src/interp/interp-util.cc
src/interp/istream.cc
)
set(WABT_LIBRARY_H
${WABT_BINARY_DIR}/include/wabt/config.h
include/wabt/apply-names.h
include/wabt/binary-reader-ir.h
include/wabt/binary-reader-logging.h
include/wabt/binary-reader.h
include/wabt/binary-writer-spec.h
include/wabt/binary-writer.h
include/wabt/binary.h
include/wabt/binding-hash.h
include/wabt/color.h
include/wabt/common.h
include/wabt/decompiler-ast.h
include/wabt/decompiler-ls.h
include/wabt/decompiler-naming.h
include/wabt/decompiler.h
include/wabt/error-formatter.h
include/wabt/expr-visitor.h
include/wabt/feature.h
include/wabt/filenames.h
include/wabt/generate-names.h
include/wabt/ir-util.h
include/wabt/ir.h
include/wabt/leb128.h
include/wabt/lexer-source-line-finder.h
include/wabt/lexer-source.h
include/wabt/literal.h
include/wabt/opcode-code-table.h
include/wabt/opcode.h
include/wabt/option-parser.h
include/wabt/resolve-names.h
include/wabt/sha256.h
include/wabt/shared-validator.h
include/wabt/stream.h
include/wabt/string-util.h
include/wabt/token.h
include/wabt/tracing.h
include/wabt/type-checker.h
include/wabt/type.h
include/wabt/utf8.h
include/wabt/validator.h
include/wabt/wast-lexer.h
include/wabt/wast-parser.h
include/wabt/wat-writer.h
# TODO(binji): Move this into its own library?
include/wabt/interp/binary-reader-interp.h
include/wabt/interp/interp-inl.h
include/wabt/interp/interp-math.h
include/wabt/interp/interp-util.h
include/wabt/interp/interp.h
include/wabt/interp/istream.h
)
set(WABT_LIBRARY_SRC ${WABT_LIBRARY_CC} ${WABT_LIBRARY_H})
add_library(wabt STATIC ${WABT_LIBRARY_SRC})
add_dependencies(wabt gen-wasm2c-prebuilt-target)
add_library(wabt::wabt ALIAS wabt)
if (HAVE_OPENSSL_SHA_H)
target_link_libraries(wabt OpenSSL::Crypto)
else()
include_directories("${WABT_SOURCE_DIR}/third_party/picosha2")
endif()
target_compile_features(wabt PUBLIC cxx_std_17)
target_include_directories(
wabt
PUBLIC
"$<BUILD_INTERFACE:${WABT_SOURCE_DIR}/include>"
"$<BUILD_INTERFACE:${WABT_BINARY_DIR}/include>"
)
if (WABT_INSTALL_RULES)
install(
TARGETS wabt EXPORT wabt-targets
COMPONENT wabt-development
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
install(
DIRECTORY "${WABT_SOURCE_DIR}/include/" "${WABT_BINARY_DIR}/include/"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT wabt-development
)
endif ()
if (HAVE_SETJMP_H)
set(WASM_RT_FILES "wasm2c/wasm-rt-impl.h" "wasm2c/wasm-rt-impl.c" "wasm2c/wasm-rt-exceptions-impl.c" "wasm2c/wasm-rt-mem-impl.c" "wasm2c/wasm-rt-impl-tableops.inc" "wasm2c/wasm-rt-mem-impl-helper.inc")
add_library(wasm-rt-impl STATIC ${WASM_RT_FILES})
target_link_libraries(wasm-rt-impl ${CMAKE_THREAD_LIBS_INIT})
add_library(wabt::wasm-rt-impl ALIAS wasm-rt-impl)
if (WABT_BIG_ENDIAN)
target_compile_definitions(wasm-rt-impl PUBLIC WABT_BIG_ENDIAN=1)
endif ()
if (WABT_INSTALL_RULES)
install(
TARGETS wasm-rt-impl
EXPORT wabt-targets
COMPONENT wabt-development
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
install(
FILES "wasm2c/wasm-rt.h" "wasm2c/wasm-rt-exceptions.h"
TYPE INCLUDE
COMPONENT wabt-development
)
install(
FILES ${WASM_RT_FILES}
DESTINATION "${CMAKE_INSTALL_DATADIR}/wabt/wasm2c"
COMPONENT wabt-development
)
endif ()
endif ()
if (BUILD_FUZZ_TOOLS)
set(FUZZ_FLAGS "-fsanitize=fuzzer,address")
add_library(wabt-fuzz STATIC ${WABT_LIBRARY_SRC})
target_link_libraries(wabt-fuzz PUBLIC wabt)
set_target_properties(wabt-fuzz
PROPERTIES
COMPILE_FLAGS "${FUZZ_FLAGS}"
)
endif ()
# libwasm, which implenents the wasm C API
if (BUILD_LIBWASM)
add_library(wasm SHARED ${WABT_LIBRARY_SRC} src/interp/interp-wasm-c-api.cc)
target_link_libraries(wasm PUBLIC wabt)
target_include_directories(wasm PUBLIC third_party/wasm-c-api/include)
if (COMPILER_IS_MSVC)
target_compile_definitions(wasm PRIVATE "WASM_API_EXTERN=__declspec(dllexport)")
else ()
target_compile_options(wasm PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Wno-old-style-cast>)
target_compile_definitions(wasm PRIVATE "WASM_API_EXTERN=__attribute__((visibility(\"default\")))")
endif ()
set_target_properties(wasm PROPERTIES CXX_VISIBILITY_PRESET hidden)
endif ()
if (CODE_COVERAGE)
add_definitions("-fprofile-arcs -ftest-coverage")
if (COMPILER_IS_CLANG)
set(CMAKE_EXE_LINKER_FLAGS "--coverage")
else ()
link_libraries(gcov)
endif ()
endif ()
include(CMakeParseArguments)
function(wabt_executable)
cmake_parse_arguments(EXE "WITH_LIBM;FUZZ;INSTALL" "NAME" "SOURCES;LIBS" ${ARGN})
# Always link libwabt.
if (EXE_FUZZ)
set(EXE_LIBS "${EXE_LIBS};wabt-fuzz")
set(EXTRA_LINK_FLAGS "${FUZZ_FLAGS}")
else ()
set(EXE_LIBS "${EXE_LIBS};wabt")
endif ()
# Optionally link libm.
if (EXE_WITH_LIBM AND (COMPILER_IS_CLANG OR COMPILER_IS_GNU))
set(EXE_LIBS "${EXE_LIBS};m")
endif ()
add_executable(${EXE_NAME} ${EXE_SOURCES})
add_dependencies(everything ${EXE_NAME})
target_link_libraries(${EXE_NAME} ${EXE_LIBS})
if (EMSCRIPTEN)
set(EXTRA_LINK_FLAGS
"${EXTRA_LINK_FLAGS} -sNODERAWFS -Oz -sALLOW_MEMORY_GROWTH"
)
endif ()
set_target_properties(${EXE_NAME}
PROPERTIES
LINK_FLAGS "${EXTRA_LINK_FLAGS}"
)
if (EXE_INSTALL)
list(APPEND WABT_EXECUTABLES ${EXE_NAME})
set(WABT_EXECUTABLES ${WABT_EXECUTABLES} PARENT_SCOPE)
add_custom_target(${EXE_NAME}-copy-to-bin ALL
COMMAND ${CMAKE_COMMAND} -E make_directory ${WABT_SOURCE_DIR}/bin
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${EXE_NAME}> ${WABT_SOURCE_DIR}/bin
DEPENDS ${EXE_NAME}
)
endif ()
endfunction()
if (BUILD_TOOLS)
# wat2wasm
wabt_executable(
NAME wat2wasm
SOURCES src/tools/wat2wasm.cc
INSTALL
)
# wast2json
wabt_executable(
NAME wast2json
SOURCES src/tools/wast2json.cc
INSTALL
)
# wasm2wat
wabt_executable(
NAME wasm2wat
SOURCES src/tools/wasm2wat.cc
INSTALL
)
# wasm2c
wabt_executable(
NAME wasm2c
SOURCES src/tools/wasm2c.cc
INSTALL
)
# wasm-stats
wabt_executable(
NAME wasm-stats
SOURCES src/tools/wasm-stats.cc src/binary-reader-stats.cc
INSTALL
)
# wasm-objdump
wabt_executable(
NAME wasm-objdump
SOURCES src/tools/wasm-objdump.cc src/binary-reader-objdump.cc
INSTALL
)
if(WITH_WASI)
# uvwasi uses the deprecated FetchContent_Populate function, disable it to avoid build error
set(CMAKE_POLICY_DEFAULT_CMP0169_BACK ${CMAKE_POLICY_DEFAULT_CMP0169})
set(CMAKE_POLICY_DEFAULT_CMP0169 OLD)
add_subdirectory("third_party/uvwasi" EXCLUDE_FROM_ALL)
set(CMAKE_POLICY_DEFAULT_CMP0169 ${CMAKE_POLICY_DEFAULT_CMP0169_BACK})
include_directories(third_party/uvwasi/include)
add_definitions(-DWITH_WASI)
set(INTERP_LIBS uvwasi_a)
set(EXTRA_INTERP_SRC src/interp/interp-wasi.cc)
if (COMPILER_IS_GNU)
target_compile_options(uv_a PRIVATE "-Wno-sign-compare")
elseif (COMPILER_IS_CLANG)
target_compile_options(uv_a PRIVATE "-Wno-implicit-fallthrough")
endif()
endif()
# wasm-interp
wabt_executable(
NAME wasm-interp
SOURCES src/tools/wasm-interp.cc ${EXTRA_INTERP_SRC}
LIBS ${INTERP_LIBS}
WITH_LIBM
INSTALL
)
# spectest-interp
wabt_executable(
NAME spectest-interp
SOURCES src/tools/spectest-interp.cc
WITH_LIBM
INSTALL
)
# wat-desugar
wabt_executable(
NAME wat-desugar
SOURCES src/tools/wat-desugar.cc
INSTALL
)
# wasm-validate
wabt_executable(
NAME wasm-validate
SOURCES src/tools/wasm-validate.cc
INSTALL
)
# wasm-strip
wabt_executable(
NAME wasm-strip
SOURCES src/tools/wasm-strip.cc
INSTALL
)
# wasm-decompile
wabt_executable(
NAME wasm-decompile
SOURCES src/tools/wasm-decompile.cc
INSTALL
)
if(BUILD_FUZZ_TOOLS)
# wasm2wat-fuzz
wabt_executable(
NAME wasm2wat-fuzz
SOURCES src/tools/wasm2wat-fuzz.cc
FUZZ
INSTALL
)
endif ()
endif ()
if (BUILD_TESTS)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(WASM2C_CFLAGS "${WASM2C_CFLAGS} -g -O0")
endif ()
if (WABT_BIG_ENDIAN)
set(WASM2C_CFLAGS "${WASM2C_CFLAGS} -DWABT_BIG_ENDIAN=1")
endif ()
if (NOT "${CMAKE_OSX_SYSROOT}" STREQUAL "")
set(WASM2C_CFLAGS "${WASM2C_CFLAGS} -isysroot ${CMAKE_OSX_SYSROOT}")
endif ()
if (DEFINED ENV{WASM2C_CFLAGS})
set(WASM2C_CFLAGS "${WASM2C_CFLAGS} $ENV{WASM2C_CFLAGS}")
endif ()
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
# Python 3.5 is the version shipped in Ubuntu Xenial
find_package(Python3 3.5 REQUIRED COMPONENTS Interpreter)
if (NOT USE_SYSTEM_GTEST)
if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gtest/googletest)
message(FATAL_ERROR "Can't find third_party/gtest. Run git submodule update --init, or disable with CMake -DBUILD_TESTS=OFF.")
endif ()
include_directories(
third_party/gtest/googletest
third_party/gtest/googletest/include
)
# gtest
add_library(gtest STATIC
third_party/gtest/googletest/src/gtest-all.cc
)
add_library(gtest_main STATIC
third_party/gtest/googletest/src/gtest_main.cc
)
if (COMPILER_IS_GNU)
target_compile_options(gtest PRIVATE "-Wno-maybe-uninitialized")
endif ()
endif ()
# hexfloat-test
set(HEXFLOAT_TEST_SRCS
src/literal.cc
src/test-hexfloat.cc
)
wabt_executable(
NAME hexfloat_test
SOURCES ${HEXFLOAT_TEST_SRCS}
LIBS gtest_main gtest ${CMAKE_THREAD_LIBS_INIT}
)
# wabt-unittests
set(UNITTESTS_SRCS
src/test-binary-reader.cc
src/test-interp.cc
src/test-intrusive-list.cc
src/test-literal.cc
src/test-option-parser.cc
src/test-filenames.cc
src/test-utf8.cc
src/test-wast-parser.cc
)
wabt_executable(
NAME wabt-unittests
SOURCES ${UNITTESTS_SRCS}
LIBS gtest_main gtest ${CMAKE_THREAD_LIBS_INIT}
)
# test running
set(RUN_TESTS_PY ${WABT_SOURCE_DIR}/test/run-tests.py)
add_custom_target(run-tests
COMMAND ${CMAKE_COMMAND} -E env WASM2C_CC=${CMAKE_C_COMPILER} WASM2C_CFLAGS=${WASM2C_CFLAGS} ${Python3_EXECUTABLE} ${RUN_TESTS_PY} --bindir $<TARGET_FILE_DIR:wat2wasm>
DEPENDS ${WABT_EXECUTABLES}
WORKING_DIRECTORY ${WABT_SOURCE_DIR}
USES_TERMINAL
)
add_custom_target(run-unittests
COMMAND $<TARGET_FILE:wabt-unittests>
DEPENDS wabt-unittests
WORKING_DIRECTORY ${WABT_SOURCE_DIR}
USES_TERMINAL
)
add_custom_target(run-c-api-tests
COMMAND ${Python3_EXECUTABLE} ${WABT_SOURCE_DIR}/test/run-c-api-examples.py --bindir $<TARGET_FILE_DIR:wat2wasm>
WORKING_DIRECTORY ${WABT_SOURCE_DIR}
USES_TERMINAL
)
add_custom_target(check DEPENDS run-unittests run-tests run-c-api-tests)
function(c_api_example NAME)
set(EXENAME wasm-c-api-${NAME})
add_executable(${EXENAME} third_party/wasm-c-api/example/${NAME}.c)
if (COMPILER_IS_MSVC)
set_target_properties(${EXENAME} PROPERTIES COMPILE_FLAGS "-wd4311")
else ()
set_target_properties(${EXENAME} PROPERTIES COMPILE_FLAGS "-std=gnu11 -Wno-pointer-to-int-cast")
endif ()
target_link_libraries(${EXENAME} wasm Threads::Threads)
add_custom_target(${EXENAME}-copy-to-bin ALL
COMMAND ${CMAKE_COMMAND} -E make_directory ${WABT_SOURCE_DIR}/bin
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${EXENAME}> ${WABT_SOURCE_DIR}/bin/
COMMAND ${CMAKE_COMMAND} -E copy ${WABT_SOURCE_DIR}/third_party/wasm-c-api/example/${NAME}.wasm $<TARGET_FILE_DIR:${EXENAME}>/
COMMAND ${CMAKE_COMMAND} -E copy ${WABT_SOURCE_DIR}/third_party/wasm-c-api/example/${NAME}.wasm ${WABT_SOURCE_DIR}/bin/
DEPENDS ${EXENAME}
)
add_dependencies(run-c-api-tests ${EXENAME})
endfunction()
c_api_example(callback)
c_api_example(finalize)
c_api_example(global)
c_api_example(hello)
c_api_example(hostref)
c_api_example(multi)
c_api_example(memory)
c_api_example(reflect)
c_api_example(serialize)
c_api_example(start)
c_api_example(table)
c_api_example(trap)
if (CMAKE_USE_PTHREADS_INIT)
c_api_example(threads)
endif ()
endif ()
# install
if (WABT_INSTALL_RULES AND (BUILD_TOOLS OR BUILD_TESTS))
install(
TARGETS ${WABT_EXECUTABLES}
COMPONENT wabt-runtime
)
if (UNIX)
install(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/man/"
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
COMPONENT wabt-documentation
FILES_MATCHING PATTERN "*.1"
)
endif ()
endif ()
if (EMSCRIPTEN)
# flags for all emscripten builds
# exceptions are never needed
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
# wabt.js
# just dump everything into one binary so we can reference it from JavaScript
add_definitions(-Wno-warn-absolute-paths)
add_executable(libwabtjs src/emscripten-helpers.cc)
add_dependencies(everything libwabtjs)
target_link_libraries(libwabtjs wabt)
set_target_properties(libwabtjs PROPERTIES OUTPUT_NAME libwabt)
set(WABT_POST_JS ${WABT_SOURCE_DIR}/src/wabt.post.js)
set(EMSCRIPTEN_EXPORTS ${WABT_SOURCE_DIR}/src/emscripten-exports.txt)
set(LIBWABT_LINK_FLAGS
--post-js ${WABT_POST_JS}
-sEXPORTED_FUNCTIONS=@${EMSCRIPTEN_EXPORTS}
-sALLOW_TABLE_GROWTH
-sALLOW_MEMORY_GROWTH
-sEXPORT_ES6
-sEXPORT_NAME=WabtModule
-sEXPORTED_RUNTIME_METHODS=stringToNewUTF8,lengthBytesUTF8
-Oz
)
string(REPLACE ";" " " LIBWABT_LINK_FLAGS_STR "${LIBWABT_LINK_FLAGS}")
set_target_properties(libwabtjs
PROPERTIES
LINK_FLAGS "${LIBWABT_LINK_FLAGS_STR}"
LINK_DEPENDS "${WABT_POST_JS};${EMSCRIPTEN_EXPORTS}"
)
endif ()
# Create find_package configuration files
if (WABT_INSTALL_RULES)
include(CMakePackageConfigHelpers)
set(WABT_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/wabt"
CACHE STRING "Path to wabt CMake files")
install(
EXPORT wabt-targets
DESTINATION "${WABT_INSTALL_CMAKEDIR}"
NAMESPACE wabt::
FILE wabt-targets.cmake
COMPONENT wabt-development
)
configure_package_config_file(
scripts/wabt-config.cmake.in
wabt-config.cmake
INSTALL_DESTINATION "${WABT_INSTALL_CMAKEDIR}"
NO_SET_AND_CHECK_MACRO
)
write_basic_package_version_file(
wabt-config-version.cmake COMPATIBILITY ExactVersion
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/wabt-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/wabt-config-version.cmake"
DESTINATION "${WABT_INSTALL_CMAKEDIR}"
COMPONENT wabt-development
)
endif ()
================================================
FILE: Contributing.md
================================================
# Contributing to WebAssembly
Interested in participating? Please follow
[the same contributing guidelines as the design repository][].
[the same contributing guidelines as the design repository]: https://github.com/WebAssembly/design/blob/master/Contributing.md
Also, please be sure to read [the README.md](README.md) for this repository.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.
================================================
FILE: Makefile
================================================
#
# Copyright 2016 WebAssembly Community Group participants
#
# 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.
#
.SUFFIXES:
MAKEFILE_NAME := $(lastword $(MAKEFILE_LIST))
ROOT_DIR := $(dir $(abspath $(MAKEFILE_NAME)))
USE_NINJA ?= 1
CMAKE_CMD ?= cmake
DEFAULT_SUFFIX = clang-debug
COMPILERS := GCC GCC_I686 CLANG CLANG_I686 EMCC
BUILD_TYPES := DEBUG RELEASE
SANITIZERS := ASAN MSAN LSAN UBSAN FUZZ
CONFIGS := NORMAL $(SANITIZERS) COV NO_TESTS
# directory names
GCC_DIR := gcc/
GCC_I686_DIR := gcc-i686/
CLANG_DIR := clang/
CLANG_I686_DIR := clang-i686/
EMCC_DIR := emscripten/
DEBUG_DIR := Debug/
RELEASE_DIR := Release/
NORMAL_DIR :=
ASAN_DIR := asan/
MSAN_DIR := msan/
LSAN_DIR := lsan/
UBSAN_DIR := ubsan/
FUZZ_DIR := fuzz/
COV_DIR := cov/
NO_TESTS_DIR := no-tests/
# CMake flags
GCC_FLAG := -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
GCC_I686_FLAG := -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ \
-DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32
CLANG_FLAG := -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
CLANG_I686_FLAG := -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32
DEBUG_FLAG := -DCMAKE_BUILD_TYPE=Debug
RELEASE_FLAG := -DCMAKE_BUILD_TYPE=Release
NORMAL_FLAG :=
ASAN_FLAG := -DUSE_ASAN=ON
MSAN_FLAG := -DUSE_MSAN=ON
LSAN_FLAG := -DUSE_LSAN=ON
UBSAN_FLAG := -DUSE_UBSAN=ON
FUZZ_FLAG := -DBUILD_FUZZ_TOOLS=ON
COV_FLAG := -DCODE_COVERAGE=ON
NO_TESTS_FLAG := -DBUILD_TESTS=OFF
# make target prefixes
GCC_PREFIX := gcc
GCC_I686_PREFIX := gcc-i686
CLANG_PREFIX := clang
CLANG_I686_PREFIX := clang-i686
EMCC_PREFIX := emscripten
DEBUG_PREFIX := -debug
RELEASE_PREFIX := -release
NORMAL_PREFIX :=
ASAN_PREFIX := -asan
MSAN_PREFIX := -msan
LSAN_PREFIX := -lsan
UBSAN_PREFIX := -ubsan
FUZZ_PREFIX := -fuzz
COV_PREFIX := -cov
NO_TESTS_PREFIX := -no-tests
ifeq ($(USE_NINJA),1)
BUILD_CMD := ninja
BUILD_FILE := build.ninja
GENERATOR := Ninja
else
BUILD_CMD := +$(MAKE) --no-print-directory
BUILD_FILE := Makefile
GENERATOR := "Unix Makefiles"
endif
CMAKE_DIR = out/$($(1)_DIR)$($(2)_DIR)$($(3)_DIR)
BUILD_TARGET = $($(1)_PREFIX)$($(2)_PREFIX)$($(3)_PREFIX)
INSTALL_TARGET = install-$($(1)_PREFIX)$($(2)_PREFIX)$($(3)_PREFIX)
TEST_TARGET = test-$($(1)_PREFIX)$($(2)_PREFIX)$($(3)_PREFIX)
define CMAKE
$(call CMAKE_DIR,$(1),$(2),$(3)):
mkdir -p $(call CMAKE_DIR,$(1),$(2),$(3))
$(call CMAKE_DIR,$(1),$(2),$(3))$$(BUILD_FILE): | $(call CMAKE_DIR,$(1),$(2),$(3))
cd $(call CMAKE_DIR,$(1),$(2),$(3)) && \
$$(if $$(filter EMCC,$(1)),emcmake ,)$$(CMAKE_CMD) -G $$(GENERATOR) $$(ROOT_DIR) $$($(1)_FLAG) $$($(2)_FLAG) $$($(3)_FLAG)
endef
define BUILD
.PHONY: $(call BUILD_TARGET,$(1),$(2),$(3))
$(call BUILD_TARGET,$(1),$(2),$(3)): $(call CMAKE_DIR,$(1),$(2),$(3))$$(BUILD_FILE)
$$(BUILD_CMD) -C $(call CMAKE_DIR,$(1),$(2),$(3)) all
endef
define INSTALL
.PHONY: $(call INSTALL_TARGET,$(1),$(2),$(3))
$(call INSTALL_TARGET,$(1),$(2),$(3)): $(call CMAKE_DIR,$(1),$(2),$(3))$$(BUILD_FILE)
$$(BUILD_CMD) -C $(call CMAKE_DIR,$(1),$(2),$(3)) install
endef
define TEST
.PHONY: $(call TEST_TARGET,$(1),$(2),$(3))
$(call TEST_TARGET,$(1),$(2),$(3)): $(call CMAKE_DIR,$(1),$(2),$(3))$$(BUILD_FILE)
$$(BUILD_CMD) -C $(call CMAKE_DIR,$(1),$(2),$(3)) check
test-everything: $(CALL TEST_TARGET,$(1),$(2),$(3))
endef
.PHONY: all install test
all: $(DEFAULT_SUFFIX)
install: install-$(DEFAULT_SUFFIX)
test: test-$(DEFAULT_SUFFIX)
.PHONY: clean
clean:
rm -rf out
.PHONY: test-everything
test-everything:
.PHONY: update-gperf
update-gperf: src/prebuilt/lexer-keywords.cc
src/prebuilt/lexer-keywords.cc: src/lexer-keywords.txt
gperf -m 50 -L C++ -N InWordSet -E -t -c --output-file=$@ $<
.PHONY: update-wasm2c-fac
update-wasm2c-fac:
make -C wasm2c/examples/fac
.PHONY: demo
demo: emscripten-release
cp out/emscripten/Release/libwabt.js docs/demo
cp out/emscripten/Release/libwabt.wasm docs/demo
# running CMake
$(foreach CONFIG,$(CONFIGS), \
$(foreach COMPILER,$(COMPILERS), \
$(foreach BUILD_TYPE,$(BUILD_TYPES), \
$(eval $(call CMAKE,$(COMPILER),$(BUILD_TYPE),$(CONFIG))))))
# building
$(foreach CONFIG,$(CONFIGS), \
$(foreach COMPILER,$(COMPILERS), \
$(foreach BUILD_TYPE,$(BUILD_TYPES), \
$(eval $(call BUILD,$(COMPILER),$(BUILD_TYPE),$(CONFIG))))))
# installing
$(foreach CONFIG,$(CONFIGS), \
$(foreach COMPILER,$(COMPILERS), \
$(foreach BUILD_TYPE,$(BUILD_TYPES), \
$(eval $(call INSTALL,$(COMPILER),$(BUILD_TYPE),$(CONFIG))))))
# test running
$(foreach CONFIG,$(CONFIGS), \
$(foreach COMPILER,$(COMPILERS), \
$(foreach BUILD_TYPE,$(BUILD_TYPES), \
$(eval $(call TEST,$(COMPILER),$(BUILD_TYPE),$(CONFIG))))))
================================================
FILE: README.md
================================================
[](https://github.com/WebAssembly/wabt/actions/workflows/build.yml)
# WABT: The WebAssembly Binary Toolkit
WABT (we pronounce it "wabbit") is a suite of tools for WebAssembly, including:
- [**wat2wasm**](https://webassembly.github.io/wabt/doc/wat2wasm.1.html): translate from [WebAssembly text format](https://webassembly.github.io/spec/core/text/index.html) to the [WebAssembly binary format](https://webassembly.github.io/spec/core/binary/index.html)
- [**wasm2wat**](https://webassembly.github.io/wabt/doc/wasm2wat.1.html): the inverse of wat2wasm, translate from the binary format back to the text format (also known as a .wat)
- [**wasm-objdump**](https://webassembly.github.io/wabt/doc/wasm-objdump.1.html): print information about a wasm binary. Similiar to objdump.
- [**wasm-interp**](https://webassembly.github.io/wabt/doc/wasm-interp.1.html): decode and run a WebAssembly binary file using a stack-based interpreter
- [**wasm-decompile**](https://webassembly.github.io/wabt/doc/wasm-decompile.1.html): decompile a wasm binary into readable C-like syntax.
- [**wat-desugar**](https://webassembly.github.io/wabt/doc/wat-desugar.1.html): parse .wat text form as supported by the spec interpreter (s-expressions, flat syntax, or mixed) and print "canonical" flat format
- [**wasm2c**](https://webassembly.github.io/wabt/doc/wasm2c.1.html): convert a WebAssembly binary file to a C source and header
- [**wasm-strip**](https://webassembly.github.io/wabt/doc/wasm-strip.1.html): remove sections of a WebAssembly binary file
- [**wasm-validate**](https://webassembly.github.io/wabt/doc/wasm-validate.1.html): validate a file in the WebAssembly binary format
- [**wast2json**](https://webassembly.github.io/wabt/doc/wast2json.1.html): convert a file in the wasm spec test format to a JSON file and associated wasm binary files
- [**wasm-stats**](https://webassembly.github.io/wabt/doc/wasm-stats.1.html): output stats for a module
- [**spectest-interp**](https://webassembly.github.io/wabt/doc/spectest-interp.1.html): read a Spectest JSON file, and run its tests in the interpreter
These tools are intended for use in (or for development of) toolchains or other
systems that want to manipulate WebAssembly files. Unlike the WebAssembly spec
interpreter (which is written to be as simple, declarative and "speccy" as
possible), they are written in C/C++ and designed for easier integration into
other systems. Unlike [Binaryen](https://github.com/WebAssembly/binaryen) these
tools do not aim to provide an optimization platform or a higher-level compiler
target; instead they aim for full fidelity and compliance with the spec (e.g.
1:1 round-trips with no changes to instructions).
## Online Demos
Wabt has been compiled to JavaScript via emscripten. Some of the functionality is available in the following demos:
- [index](https://webassembly.github.io/wabt/demo/)
- [wat2wasm](https://webassembly.github.io/wabt/demo/wat2wasm/)
- [wasm2wat](https://webassembly.github.io/wabt/demo/wasm2wat/)
## Supported Proposals
* Proposal: Name and link to the WebAssembly proposal repo
* flag: Flag to pass to the tool to enable/disable support for the feature
* default: Whether the feature is enabled by default
* binary: Whether wabt can read/write the binary format
* text: Whether wabt can read/write the text format
* validate: Whether wabt can validate the syntax
* interpret: Whether wabt can execute these operations in `wasm-interp` or `spectest-interp`
* wasm2c: Whether wasm2c supports these operations
| Proposal | flag | default | binary | text | validate | interpret | wasm2c |
| --------------------- | --------------------------- | - | - | - | - | - | - |
| [exception handling][]| `--enable-exceptions` | | ✓ | ✓ | ✓ | ✓ | ✓ |
| [mutable globals][] | `--disable-mutable-globals` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| [nontrapping float-to-int conversions][] | `--disable-saturating-float-to-int` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| [sign extension][] | `--disable-sign-extension` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| [simd][] | `--disable-simd` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| [threads][] | `--enable-threads` | | ✓ | ✓ | ✓ | ✓ | |
| [multi-value][] | `--disable-multi-value` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| [tail-call][] | `--enable-tail-call` | | ✓ | ✓ | ✓ | ✓ | ✓ |
| [bulk memory][] | `--disable-bulk-memory` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| [reference types][] | `--disable-reference-types` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| [annotations][] | `--enable-annotations` | | | ✓ | | | |
| [memory64][] | `--enable-memory64` | | ✓ | ✓ | ✓ | ✓ | ✓ |
| [multi-memory][] | `--enable-multi-memory` | | ✓ | ✓ | ✓ | ✓ | ✓ |
| [extended-const][] | `--enable-extended-const` | | ✓ | ✓ | ✓ | ✓ | ✓ |
| [relaxed-simd][] | `--enable-relaxed-simd` | | ✓ | ✓ | ✓ | ✓ | |
| [custom-page-sizes][] | `--enable-custom-page-sizes`| | ✓ | ✓ | ✓ | ✓ | ✓ |
| [compact-imports][] | `--enable-compact-imports` | | ✓ | | ✓ | | |
| [function-references][] | `--enable-function-references` | | ✓ | ✓ | ✓ | ✓ | |
| [wide-arithmetic][] | `--enable-wide-arithmetic` | | ✓ | ✓ | ✓ | | |
[exception handling]: https://github.com/WebAssembly/exception-handling
[mutable globals]: https://github.com/WebAssembly/mutable-global
[nontrapping float-to-int conversions]: https://github.com/WebAssembly/nontrapping-float-to-int-conversions
[sign extension]: https://github.com/WebAssembly/sign-extension-ops
[simd]: https://github.com/WebAssembly/simd
[threads]: https://github.com/WebAssembly/threads
[multi-value]: https://github.com/WebAssembly/multi-value
[tail-call]: https://github.com/WebAssembly/tail-call
[bulk memory]: https://github.com/WebAssembly/bulk-memory-operations
[reference types]: https://github.com/WebAssembly/reference-types
[annotations]: https://github.com/WebAssembly/annotations
[memory64]: https://github.com/WebAssembly/memory64
[multi-memory]: https://github.com/WebAssembly/multi-memory
[extended-const]: https://github.com/WebAssembly/extended-const
[relaxed-simd]: https://github.com/WebAssembly/relaxed-simd
[custom-page-sizes]: https://github.com/WebAssembly/custom-page-sizes
[function-references]: https://github.com/WebAssembly/function-references
[compact-imports]: https://github.com/WebAssembly/compact-import-section
[wide-arithmetic]: https://github.com/WebAssembly/wide-arithmetic
## Cloning
Clone as normal, but don't forget to get the submodules as well:
```console
$ git clone --recursive https://github.com/WebAssembly/wabt
$ cd wabt
$ git submodule update --init
```
This will fetch the testsuite and gtest repos, which are needed for some tests.
## Building using CMake directly (Linux and macOS)
You'll need [CMake](https://cmake.org). You can then run CMake, the normal way:
```console
$ mkdir build
$ cd build
$ cmake ..
$ cmake --build .
```
This will produce build files using CMake's default build generator. Read the
CMake documentation for more information.
**NOTE**: You must create a separate directory for the build artifacts (e.g.
`build` above). Running `cmake` from the repo root directory will not work
since the build produces an executable called `wasm2c` which conflicts with the
`wasm2c` directory.
## Building using the top-level `Makefile` (Linux and macOS)
**NOTE**: Under the hood, this uses `make` to run CMake, which then calls
`ninja` to perform that actual build. On some systems (typically macOS), this
doesn't build properly. If you see these errors, you can build using CMake
directly as described above.
You'll need [CMake](https://cmake.org) and [Ninja](https://ninja-build.org). If
you just run `make`, it will run CMake for you, and put the result in
`out/clang/Debug/` by default:
> Note: If you are on macOS, you will need to use CMake version 3.2 or higher
```console
$ make
```
This will build the default version of the tools: a debug build using the Clang
compiler.
There are many make targets available for other configurations as well. They
are generated from every combination of a compiler, build type and
configuration.
- compilers: `gcc`, `clang`, `gcc-i686`, `emscripten`
- build types: `debug`, `release`
- configurations: empty, `asan`, `msan`, `lsan`, `ubsan`, `fuzz`, `no-tests`
They are combined with dashes, for example:
```console
$ make clang-debug
$ make gcc-i686-release
$ make clang-debug-lsan
$ make gcc-debug-no-tests
```
## Building (Windows)
You'll need [CMake](https://cmake.org). You'll also need
[Visual Studio](https://www.visualstudio.com/) (2015 or newer) or
[MinGW](https://www.mingw-w64.org/).
_Note: Visual Studio 2017 and later come with CMake (and the Ninja build system)
out of the box, and should be on your PATH if you open a Developer Command prompt.
See <https://aka.ms/cmake> for more details._
You can run CMake from the command prompt, or use the CMake GUI tool. See
[Running CMake](https://cmake.org/runningcmake/) for more information.
When running from the commandline, create a new directory for the build
artifacts, then run cmake from this directory:
```console
> cd [build dir]
> cmake [wabt project root] -DCMAKE_BUILD_TYPE=[config] -DCMAKE_INSTALL_PREFIX=[install directory] -G [generator]
```
The `[config]` parameter should be a CMake build type, typically `DEBUG` or `RELEASE`.
The `[generator]` parameter should be the type of project you want to generate,
for example `"Visual Studio 14 2015"`. You can see the list of available
generators by running `cmake --help`.
To build the project, you can use Visual Studio, or you can tell CMake to do it:
```console
> cmake --build [wabt project root] --config [config] --target install
```
This will build and install to the installation directory you provided above.
So, for example, if you want to build the debug configuration on Visual Studio 2015:
```console
> mkdir build
> cd build
> cmake .. -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_INSTALL_PREFIX=..\ -G "Visual Studio 14 2015"
> cmake --build . --config DEBUG --target install
```
## Adding new keywords to the lexer
If you want to add new keywords, you'll need to install
[gperf](https://www.gnu.org/software/gperf/). Before you upload your PR, please
run `make update-gperf` to update the prebuilt C++ sources in `src/prebuilt/`.
## Running wat2wasm
Some examples:
```sh
# parse test.wat and write to .wasm binary file with the same name
$ bin/wat2wasm test.wat
# parse test.wat and write to binary file test.wasm
$ bin/wat2wasm test.wat -o test.wasm
# parse spec-test.wast, and write verbose output to stdout (including the
# meaning of every byte)
$ bin/wat2wasm spec-test.wast -v
```
You can use `--help` to get additional help:
```console
$ bin/wat2wasm --help
```
Or try the [online demo](https://webassembly.github.io/wabt/demo/wat2wasm/).
## Running wasm2wat
Some examples:
```sh
# parse binary file test.wasm and write text file test.wat
$ bin/wasm2wat test.wasm -o test.wat
# parse test.wasm and write test.wat
$ bin/wasm2wat test.wasm -o test.wat
```
You can use `--help` to get additional help:
```console
$ bin/wasm2wat --help
```
Or try the [online demo](https://webassembly.github.io/wabt/demo/wasm2wat/).
## Running wasm-interp
Some examples:
```sh
# parse binary file test.wasm, and type-check it
$ bin/wasm-interp test.wasm
# parse test.wasm and run all its exported functions
$ bin/wasm-interp test.wasm --run-all-exports
# parse test.wasm, run the exported functions and trace the output
$ bin/wasm-interp test.wasm --run-all-exports --trace
# parse test.json and run the spec tests
$ bin/wasm-interp test.json --spec
# parse test.wasm and run all its exported functions, setting the value stack
# size to 100 elements
$ bin/wasm-interp test.wasm -V 100 --run-all-exports
```
You can use `--help` to get additional help:
```console
$ bin/wasm-interp --help
```
## Running wast2json
See [wast2json.md](docs/wast2json.md).
## Running wasm-decompile
For example:
```sh
# parse binary file test.wasm and write text file test.dcmp
$ bin/wasm-decompile test.wasm -o test.dcmp
```
You can use `--help` to get additional help:
```console
$ bin/wasm-decompile --help
```
See [decompiler.md](docs/decompiler.md) for more information on the language
being generated.
## Running wasm2c
See [wasm2c.md](wasm2c/README.md)
## Running the test suite
See [test/README.md](test/README.md).
## Sanitizers
To build with the [LLVM sanitizers](https://github.com/google/sanitizers),
append the sanitizer name to the target:
```console
$ make clang-debug-asan
$ make clang-debug-msan
$ make clang-debug-lsan
$ make clang-debug-ubsan
```
There are configurations for the Address Sanitizer (ASAN), Memory Sanitizer
(MSAN), Leak Sanitizer (LSAN) and Undefined Behavior Sanitizer (UBSAN). You can
read about the behaviors of the sanitizers in the link above, but essentially
the Address Sanitizer finds invalid memory accesses (use after free, access
out-of-bounds, etc.), Memory Sanitizer finds uses of uninitialized memory,
the Leak Sanitizer finds memory leaks, and the Undefined Behavior Sanitizer
finds undefined behavior (surprise!).
Typically, you'll just want to run all the tests for a given sanitizer:
```console
$ make test-asan
```
You can also run the tests for a release build:
```console
$ make test-clang-release-asan
...
```
The GitHub actions bots run all of these tests (and more). Before you land a change,
you should run them too. One easy way is to use the `test-everything` target:
```console
$ make test-everything
```
## Fuzzing
To build using the [LLVM fuzzer support](https://llvm.org/docs/LibFuzzer.html),
append `fuzz` to the target:
```console
$ make clang-debug-fuzz
```
This will produce a `wasm2wat_fuzz` binary. It can be used to fuzz the binary
reader, as well as reproduce fuzzer errors found by
[oss-fuzz](https://github.com/google/oss-fuzz/tree/master/projects/wabt).
```console
$ out/clang/Debug/fuzz/wasm2wat_fuzz ...
```
See the [libFuzzer documentation](https://llvm.org/docs/LibFuzzer.html) for
more information about how to use this tool.
## Installing prebuilt binaries
Wabt is available on many platforms as prepackaged binaries. For example, if
you use Homebrew you can use:
```sh
brew install wabt
```
And you use an apt-based linux distribution you can use:
```sh
sudo apt install wabt
```
You can also download prebuilt binaries for many platforms directly from the
github releases page.
================================================
FILE: SECURITY.md
================================================
# Security Policy
WABT is maintained by volunteers on a reasonable-effort basis. If you
have discovered a security vulnerability, please open a GitHub issue
to report it. In the future, we may move to a system of private
reporting of security issues. Please submit your report by filling out
[this form](https://github.com/WebAssembly/wabt/issues/new).
Please provide the following information in your report:
- A description of the vulnerability and its impact
- How to reproduce the issue
- Which WABT tools or library functions are affected
- Which WebAssembly features (`--enable` flags) must be enabled
================================================
FILE: docs/decompiler.md
================================================
# wasm-decompile
Decompiles binary wasm modules into a text format that is significantly
more compact and familiar (for users of C-style languages).
Example:
`bin/wasm-decompile test.wasm -o test.dcmp`
## Goals.
This tool is aimed at users that want to be able to "read" large volumes
of Wasm code such as language, runtime and tool developers, or any programmers
that may not have the source code of the generated wasm available, or are
trying to understand what the generated code does.
The syntax has been designed to be as light-weight and as readable as possible,
while still allowing one to see the underlying Wasm constructs clearly.
## Non-goals.
Be a programming language.
Though compiling this output code back into a wasm module is possible,
such functionality is currently not provided. The format is very low-level,
much like Wasm itself, so even though it looks more high level than the .wat
format, it wouldn't be any more suitable for general purpose programming.
## Language guide.
This section shows some aspects of the language in terms of how they map to
Wasm and/or how they might differ from a typical C-like language. It does
not try to define the actual semantics of Wasm, the reader is expected to
already be mostly familiar with that.
### Naming.
wasm-decompile, much like wasm2wat, derives names from the name section
(preferrably), or linker symbols (if available), or import/export (if not
available in the other 2). For things that have no
names, names are generated starting from `a`, `b`, `c` and so forth.
In addition, prefixes are used for things that are not arguments/locals:
`f_` for functions, `g_` for globals, etc.
Existing names may be generated "demangled" C++ function signatures, which
in the case of functions using STL types may end up several hundred characters
long. Besides removing characters not typically part of an identifier, the
decompiler also strips common keywords/types from these in an effort to
reduce their size.
Linker symbols are typically only available in wasm .o files, though if useful
for naming can be retained in fully linked wasm modules using the
`--emit-reloc` flag to `wasm.ld`. This gives you names for most functions
even when `--strip-debug` was used.
### Top level declarations.
Top level items may be preceded with `import` or `export`.
Memory is declared like `memory m(initial: 1, max: 0);`
Globals: `global my_glob:int;`
Data: `data d_a(offset: 0) = "Hello, World!";`
Functions (see below for instructions that may appear between `{}`):
`function f(a:int, b:int):int { return a + b; }`
### Statements and expressions.
An expression is generated for any sequence of Wasm instructions that
leave exactly 1 value on the stack.
For instructions that leave no value values on the stack, a statement is
generated, which is an expression that sits on its own line in the context
of a control-flow block, or the function itself. A statement may also be
generated for expressions that return a value through control flow, such
as a branch instruction.
Instructions that leave multiple values on the stack, or otherwise do stack
operations that break the "expression order", instead force the values to be
written to temporary variables (named `t1`, `t2` etc) which the subsequent
instructions can then operate upon (this does not happen with MVP-only code).
### Declaration of arguments and locals.
Arguments are defined in the function signature, as shown above.
Locals are defined upon first use: `var my_local:int = 1;`
### Types.
The decompiler uses `int` and `long` for 32-bit and 64-bit integers, and
`float` and `double` for 32-bit and 64-bit floating point numbers.
Besides these, there are the types `byte` and `ubyte` (8-bit), `short` and
`ushort` (16-bit), and `uint`, which are used exclusively with certain
load/store operations.
### Loads and stores.
These tend to be the hardest to "read" in Wasm code, as they've lost all
context of the data structures and types the language that Wasm was compiled
from was operating upon.
wasm-decompile has a few features to try and make these more readable.
The basic form looks like an array indexing operation, so `o[2]:int` says: read
element 2 from `o` when seen as an array of ints. This thus accesses 4 bytes
at byte-offset 8.
`o` is just declared as an `int`, since there is no such thing as a pointer
type in Wasm. But wasm-decompile tries to derive them. For example, if the
code is doing `o[0]:int = o[1]:int + o[2]:int`, then wasm-decompile assumes
`o` points to a struct with 3 ints, and may instead compile this to:
var o:{ a:int, b:int, c:int };
o.a = o.b + o.c
The `{}` type is a nameless struct declaration (named ones tbd) that hints the
reader at what kind of memory layout `o` is accessing. This seems more
informative than just uncorrelated indices all over the code.
Sadly, optimized output from a compiler like LLVM often reworks memory accesses
in such crazy ways that this "struct detection" fails, for example it falls
back to indexing operations when there are holes or overlaps in the memory
layout, or types are mixed, etc. This happens even more so when locals such
as `o` are being re-used for unrelated things in memory.
For accesses that are not contiguous, but at least of the same type, the
decompiler will change the pointer type from `o:int` to e.g. `o:float_ptr` (and
similarly, it will omit the type from the actual access, `o[2]` instead
of `o[2]:int`).
Additionally, wasm-decompile tried to clean up typical indexing operations.
For example, when accessing any array of 32-bit elements, generated Wasm
code often looks like `(base + (index << 2))[0]:int`, since Wasm has no
built-in way to scale the index by the type of thing being loaded.
wasm-decompile then transforms this into just `base[index]:int`, since the
scaling of anything between the `[]` by the type size is already implied.
### Control flow.
Wasm's if-then maps fairly directly to a C-like `if (c) { 1; } else { 2; }`.
Unlike most languages, these if-thens can also be expressions, as shown in
this example (wasm-decompile does not currently use the `?:` ternary).
Wasm's loop becomes a `loop L { ...; continue L; }` structure. The
inclusion of a label means nested loops can continue any of them.
Wasm's blocks are little more than a label for forward jumps, and cause
excessive amounts of nesting in other text formats such as .wat, so here
they are reduced to what they naturally are: a label. This label uses `{}`
for denoting a block only when used as an expression, so typically does not
indent, and thus doesn't cause endless nesting:
if (c) goto L;
...
label L:
### Operator precedence.
wasm-decompile uses the following operator precedence to reduce the amount of
`()` needed in expressions, from high (needs no `()`) to low (always needs
`()` when nested):
* `()`, `a`, `1`, `a()`
* `[]`
* `if () {} else {}`
* `*`, `/`, `%`
* `+`, `-`
* `<<`, `>>`
* `==`, `!=`, `<`, `>`, `>=`, `<=`
* `&`, `|`
* `min`, `max`
* `=`
Only `+` and `*` are associative, i.e. can have multiple of them in sequence
without additional `()`.
================================================
FILE: docs/demo/custom.css
================================================
html {
font-size: 80%;
line-height: 1.3;
}
* {
box-sizing: border-box;
}
body {
font-family: sans-serif;
font-size: 1rem;
line-height: 1.3125rem;
margin: 0;
}
h1 {
font-size: 2.375rem;
line-height: 2.625rem;
margin-top: 1.3125rem;
margin-bottom: 1.3125rem;
}
h2 {
font-size: 1.75rem;
line-height: 2.625rem;
margin-top: 1.3125rem;
margin-bottom: 1.3125rem;
}
h3 {
font-size: 1.3125rem;
line-height: 1.3125rem;
margin-top: 1.3125rem;
margin-bottom: 0rem;
}
h4 {
font-size: 1rem;
line-height: 1.3125rem;
margin-top: 1.3125rem;
margin-bottom: 0rem;
}
h5 {
font-size: 1rem;
line-height: 1.3125rem;
margin-top: 1.3125rem;
margin-bottom: 0rem;
}
p, ul {
padding-left: 0;
margin-top: 0rem;
margin-bottom: 1.3125rem;
}
ul ul, ol ol, ul ol, ol ul {
margin-top: 0rem;
margin-bottom: 0rem;
}
pre {
margin: 0;
}
.right {
float: right;
white-space: nowrap;
}
.hidden {
display: none;
}
#split-grid {
position: absolute;
height: 100%;
left: 0;
right: 0;
top: 0;
}
.CodeMirror, .cm-editor, .output {
position: absolute;
height: calc(100% - 2.625rem);
top: 2.625rem;
left: 0;
right: 0;
}
.output {
padding: 0.3125rem;
overflow: auto;
}
.toolbar {
position: absolute;
top: 0;
right: 0;
left: 0;
color: #555;
background-color: #eee;
z-index: 9;
height: 2.625rem;
line-height: 2rem;
padding: 0.3125rem 0.3125rem 0;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3);
}
.split-horizontal, .gutter-horizontal {
height: 100%;
float: left;
}
.gutter-horizontal {
cursor: ew-resize;
background-image: url('assets/vertical.png');
}
.gutter-vertical {
cursor: ns-resize;
background-image: url('assets/horizontal.png');
}
.gutter {
touch-action: none;
user-select: none;
background-color: #ddd;
background-repeat: no-repeat;
background-position: 50%;
z-index: 0;
}
.split {
position: relative;
overflow: hidden;
}
body {
display: flex;
min-height: 100vh;
flex-direction: column;
}
main {
flex: 1;
position: relative;
}
header {
padding: 0 1em;
z-index: 10;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3);
}
ul {
margin: 1em;
list-style: none;
}
#features {
display: flex;
flex-wrap: wrap;
gap: 8px 16px;
margin-top: 0.5rem;
margin-bottom: 1rem;
}
.feature-item {
display: flex;
align-items: center;
gap: 4px;
}
================================================
FILE: docs/demo/index.html
================================================
<!--
Copyright 2017 WebAssembly Community Group participants
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.
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
<title>wabt demos</title>
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="custom.css" rel="stylesheet">
</head>
<body>
<header>
<h1>wabt demos</h1>
</header>
<main>
<ul>
<li>
<a href="wat2wasm/index.html">wat2wasm demo</a>
<p>
Example showing converting text to binary.
</p>
</li>
<li>
<a href="wasm2wat/index.html">wasm2wat demo</a>
<p>
Example showing converting binary to text.
</p>
</li>
</ul>
</main>
</body>
</html>
================================================
FILE: docs/demo/libwabt.js
================================================
async function WabtModule(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("node:module");var require=createRequire(import.meta.url)}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var isFileURI=filename=>filename.startsWith("file://");var readyPromiseResolve,readyPromiseReject;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["h"]()}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("libwabt.wasm")}return new URL("libwabt.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={a:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var __abort_js=()=>abort("");var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};var _fd_close=fd=>52;var UTF8Decoder=new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{if(!ptr)return"";var end=findStringEnd(HEAPU8,ptr,maxBytesToRead,ignoreNul);return UTF8Decoder.decode(HEAPU8.subarray(ptr,end))};var printCharBuffers=[null,[],[]];var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);return UTF8Decoder.decode(heapOrArray.buffer?heapOrArray.subarray(idx,endPtr):new Uint8Array(heapOrArray.slice(idx,endPtr)))};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["stringToNewUTF8"]=stringToNewUTF8;var _wabt_new_features,_wabt_destroy_features,_wabt_exceptions_enabled,_wabt_set_exceptions_enabled,_wabt_mutable_globals_enabled,_wabt_set_mutable_globals_enabled,_wabt_sat_float_to_int_enabled,_wabt_set_sat_float_to_int_enabled,_wabt_sign_extension_enabled,_wabt_set_sign_extension_enabled,_wabt_simd_enabled,_wabt_set_simd_enabled,_wabt_threads_enabled,_wabt_set_threads_enabled,_wabt_function_references_enabled,_wabt_set_function_references_enabled,_wabt_multi_value_enabled,_wabt_set_multi_value_enabled,_wabt_tail_call_enabled,_wabt_set_tail_call_enabled,_wabt_bulk_memory_enabled,_wabt_set_bulk_memory_enabled,_wabt_reference_types_enabled,_wabt_set_reference_types_enabled,_wabt_annotations_enabled,_wabt_set_annotations_enabled,_wabt_code_metadata_enabled,_wabt_set_code_metadata_enabled,_wabt_gc_enabled,_wabt_set_gc_enabled,_wabt_memory64_enabled,_wabt_set_memory64_enabled,_wabt_multi_memory_enabled,_wabt_set_multi_memory_enabled,_wabt_extended_const_enabled,_wabt_set_extended_const_enabled,_wabt_relaxed_simd_enabled,_wabt_set_relaxed_simd_enabled,_wabt_custom_page_sizes_enabled,_wabt_set_custom_page_sizes_enabled,_wabt_compact_imports_enabled,_wabt_set_compact_imports_enabled,_wabt_wide_arithmetic_enabled,_wabt_set_wide_arithmetic_enabled,_wabt_new_wast_buffer_lexer,_wabt_parse_wat,_wabt_parse_wast,_wabt_read_binary,_wabt_validate_module,_wabt_validate_script,_wabt_write_binary_spec_script,_wabt_apply_names_module,_wabt_generate_names_module,_wabt_write_binary_module,_wabt_write_text_module,_wabt_destroy_module,_wabt_destroy_wast_lexer,_wabt_new_errors,_wabt_format_text_errors,_wabt_format_binary_errors,_wabt_destroy_errors,_wabt_parse_wat_result_get_result,_wabt_parse_wat_result_release_module,_wabt_destroy_parse_wat_result,_wabt_parse_wast_result_get_result,_wabt_parse_wast_result_release_module,_wabt_read_binary_result_get_result,_wabt_read_binary_result_release_module,_wabt_destroy_read_binary_result,_wabt_write_module_result_get_result,_wabt_write_module_result_release_output_buffer,_wabt_write_module_result_release_log_output_buffer,_wabt_destroy_write_module_result,_wabt_output_buffer_get_data,_wabt_output_buffer_get_size,_wabt_destroy_output_buffer,_free,_malloc,memory,__indirect_function_table,wasmMemory;function assignWasmExports(wasmExports){_wabt_new_features=Module["_wabt_new_features"]=wasmExports["i"];_wabt_destroy_features=Module["_wabt_destroy_features"]=wasmExports["j"];_wabt_exceptions_enabled=Module["_wabt_exceptions_enabled"]=wasmExports["k"];_wabt_set_exceptions_enabled=Module["_wabt_set_exceptions_enabled"]=wasmExports["l"];_wabt_mutable_globals_enabled=Module["_wabt_mutable_globals_enabled"]=wasmExports["m"];_wabt_set_mutable_globals_enabled=Module["_wabt_set_mutable_globals_enabled"]=wasmExports["n"];_wabt_sat_float_to_int_enabled=Module["_wabt_sat_float_to_int_enabled"]=wasmExports["o"];_wabt_set_sat_float_to_int_enabled=Module["_wabt_set_sat_float_to_int_enabled"]=wasmExports["p"];_wabt_sign_extension_enabled=Module["_wabt_sign_extension_enabled"]=wasmExports["q"];_wabt_set_sign_extension_enabled=Module["_wabt_set_sign_extension_enabled"]=wasmExports["r"];_wabt_simd_enabled=Module["_wabt_simd_enabled"]=wasmExports["s"];_wabt_set_simd_enabled=Module["_wabt_set_simd_enabled"]=wasmExports["t"];_wabt_threads_enabled=Module["_wabt_threads_enabled"]=wasmExports["u"];_wabt_set_threads_enabled=Module["_wabt_set_threads_enabled"]=wasmExports["v"];_wabt_function_references_enabled=Module["_wabt_function_references_enabled"]=wasmExports["w"];_wabt_set_function_references_enabled=Module["_wabt_set_function_references_enabled"]=wasmExports["x"];_wabt_multi_value_enabled=Module["_wabt_multi_value_enabled"]=wasmExports["y"];_wabt_set_multi_value_enabled=Module["_wabt_set_multi_value_enabled"]=wasmExports["z"];_wabt_tail_call_enabled=Module["_wabt_tail_call_enabled"]=wasmExports["A"];_wabt_set_tail_call_enabled=Module["_wabt_set_tail_call_enabled"]=wasmExports["B"];_wabt_bulk_memory_enabled=Module["_wabt_bulk_memory_enabled"]=wasmExports["C"];_wabt_set_bulk_memory_enabled=Module["_wabt_set_bulk_memory_enabled"]=wasmExports["D"];_wabt_reference_types_enabled=Module["_wabt_reference_types_enabled"]=wasmExports["E"];_wabt_set_reference_types_enabled=Module["_wabt_set_reference_types_enabled"]=wasmExports["F"];_wabt_annotations_enabled=Module["_wabt_annotations_enabled"]=wasmExports["G"];_wabt_set_annotations_enabled=Module["_wabt_set_annotations_enabled"]=wasmExports["H"];_wabt_code_metadata_enabled=Module["_wabt_code_metadata_enabled"]=wasmExports["I"];_wabt_set_code_metadata_enabled=Module["_wabt_set_code_metadata_enabled"]=wasmExports["J"];_wabt_gc_enabled=Module["_wabt_gc_enabled"]=wasmExports["K"];_wabt_set_gc_enabled=Module["_wabt_set_gc_enabled"]=wasmExports["L"];_wabt_memory64_enabled=Module["_wabt_memory64_enabled"]=wasmExports["M"];_wabt_set_memory64_enabled=Module["_wabt_set_memory64_enabled"]=wasmExports["N"];_wabt_multi_memory_enabled=Module["_wabt_multi_memory_enabled"]=wasmExports["O"];_wabt_set_multi_memory_enabled=Module["_wabt_set_multi_memory_enabled"]=wasmExports["P"];_wabt_extended_const_enabled=Module["_wabt_extended_const_enabled"]=wasmExports["Q"];_wabt_set_extended_const_enabled=Module["_wabt_set_extended_const_enabled"]=wasmExports["R"];_wabt_relaxed_simd_enabled=Module["_wabt_relaxed_simd_enabled"]=wasmExports["S"];_wabt_set_relaxed_simd_enabled=Module["_wabt_set_relaxed_simd_enabled"]=wasmExports["T"];_wabt_custom_page_sizes_enabled=Module["_wabt_custom_page_sizes_enabled"]=wasmExports["U"];_wabt_set_custom_page_sizes_enabled=Module["_wabt_set_custom_page_sizes_enabled"]=wasmExports["V"];_wabt_compact_imports_enabled=Module["_wabt_compact_imports_enabled"]=wasmExports["W"];_wabt_set_compact_imports_enabled=Module["_wabt_set_compact_imports_enabled"]=wasmExports["X"];_wabt_wide_arithmetic_enabled=Module["_wabt_wide_arithmetic_enabled"]=wasmExports["Y"];_wabt_set_wide_arithmetic_enabled=Module["_wabt_set_wide_arithmetic_enabled"]=wasmExports["Z"];_wabt_new_wast_buffer_lexer=Module["_wabt_new_wast_buffer_lexer"]=wasmExports["_"];_wabt_parse_wat=Module["_wabt_parse_wat"]=wasmExports["$"];_wabt_parse_wast=Module["_wabt_parse_wast"]=wasmExports["aa"];_wabt_read_binary=Module["_wabt_read_binary"]=wasmExports["ba"];_wabt_validate_module=Module["_wabt_validate_module"]=wasmExports["ca"];_wabt_validate_script=Module["_wabt_validate_script"]=wasmExports["da"];_wabt_write_binary_spec_script=Module["_wabt_write_binary_spec_script"]=wasmExports["ea"];_wabt_apply_names_module=Module["_wabt_apply_names_module"]=wasmExports["fa"];_wabt_generate_names_module=Module["_wabt_generate_names_module"]=wasmExports["ga"];_wabt_write_binary_module=Module["_wabt_write_binary_module"]=wasmExports["ha"];_wabt_write_text_module=Module["_wabt_write_text_module"]=wasmExports["ia"];_wabt_destroy_module=Module["_wabt_destroy_module"]=wasmExports["ja"];_wabt_destroy_wast_lexer=Module["_wabt_destroy_wast_lexer"]=wasmExports["ka"];_wabt_new_errors=Module["_wabt_new_errors"]=wasmExports["la"];_wabt_format_text_errors=Module["_wabt_format_text_errors"]=wasmExports["ma"];_wabt_format_binary_errors=Module["_wabt_format_binary_errors"]=wasmExports["na"];_wabt_destroy_errors=Module["_wabt_destroy_errors"]=wasmExports["oa"];_wabt_parse_wat_result_get_result=Module["_wabt_parse_wat_result_get_result"]=wasmExports["pa"];_wabt_parse_wat_result_release_module=Module["_wabt_parse_wat_result_release_module"]=wasmExports["qa"];_wabt_destroy_parse_wat_result=Module["_wabt_destroy_parse_wat_result"]=wasmExports["ra"];_wabt_parse_wast_result_get_result=Module["_wabt_parse_wast_result_get_result"]=wasmExports["sa"];_wabt_parse_wast_result_release_module=Module["_wabt_parse_wast_result_release_module"]=wasmExports["ta"];_wabt_read_binary_result_get_result=Module["_wabt_read_binary_result_get_result"]=wasmExports["ua"];_wabt_read_binary_result_release_module=Module["_wabt_read_binary_result_release_module"]=wasmExports["va"];_wabt_destroy_read_binary_result=Module["_wabt_destroy_read_binary_result"]=wasmExports["wa"];_wabt_write_module_result_get_result=Module["_wabt_write_module_result_get_result"]=wasmExports["xa"];_wabt_write_module_result_release_output_buffer=Module["_wabt_write_module_result_release_output_buffer"]=wasmExports["ya"];_wabt_write_module_result_release_log_output_buffer=Module["_wabt_write_module_result_release_log_output_buffer"]=wasmExports["za"];_wabt_destroy_write_module_result=Module["_wabt_destroy_write_module_result"]=wasmExports["Aa"];_wabt_output_buffer_get_data=Module["_wabt_output_buffer_get_data"]=wasmExports["Ba"];_wabt_output_buffer_get_size=Module["_wabt_output_buffer_get_size"]=wasmExports["Ca"];_wabt_destroy_output_buffer=Module["_wabt_destroy_output_buffer"]=wasmExports["Da"];_free=Module["_free"]=wasmExports["Ea"];_malloc=Module["_malloc"]=wasmExports["Fa"];memory=wasmMemory=wasmExports["g"];__indirect_function_table=wasmExports["__indirect_function_table"]}var wasmImports={f:__abort_js,b:_emscripten_resize_heap,c:_environ_get,d:_environ_sizes_get,e:_fd_close,a:_fd_write};function run(){preRun();function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();const WABT_OK=0;const FEATURES=Object.freeze({exceptions:false,mutable_globals:true,sat_float_to_int:true,sign_extension:true,simd:true,threads:false,function_references:false,multi_value:true,tail_call:false,bulk_memory:true,reference_types:true,annotations:false,code_metadata:false,gc:false,memory64:false,multi_memory:false,extended_const:false,relaxed_simd:false,custom_page_sizes:false,compact_imports:false,wide_arithmetic:false});function malloc(size){const addr=Module._malloc(size);if(addr==0){throw new Error("out of memory")}return addr}function allocateBuffer(buf){let addr;let size;if(buf instanceof ArrayBuffer){size=buf.byteLength;addr=malloc(size);new Uint8Array(HEAPU8.buffer,addr,size).set(new Uint8Array(buf))}else if(ArrayBuffer.isView(buf)){size=buf.byteLength;addr=malloc(size);new Uint8Array(HEAPU8.buffer,addr,size).set(new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength))}else if(typeof buf=="string"){addr=stringToNewUTF8(buf);size=lengthBytesUTF8(buf)}else{throw new Error("unknown buffer type: "+buf)}return{addr,size}}class Features{constructor(obj={}){this.addr=Module._wabt_new_features();for(const[f,v]of Object.entries(FEATURES)){this[f]=obj[f]??v}}destroy(){Module._wabt_destroy_features(this.addr)}}Object.keys(FEATURES).forEach(function(feature){Object.defineProperty(Features.prototype,feature,{enumerable:true,get:function(){return Module["_wabt_"+feature+"_enabled"](this.addr)},set:function(newValue){Module["_wabt_set_"+feature+"_enabled"](this.addr,newValue|0)}})});class Lexer{constructor(filename,buffer,errors){this.filename=stringToNewUTF8(filename);this.bufferObj=allocateBuffer(buffer);this.addr=Module._wabt_new_wast_buffer_lexer(this.filename,this.bufferObj.addr,this.bufferObj.size,errors.addr)}destroy(){Module._wabt_destroy_wast_lexer(this.addr);Module._free(this.bufferObj.addr);Module._free(this.filename)}}class OutputBuffer{constructor(addr){this.addr=addr}toTypedArray(){if(!this.addr){return null}const addr=Module._wabt_output_buffer_get_data(this.addr);const size=Module._wabt_output_buffer_get_size(this.addr);const buffer=new Uint8Array(size);buffer.set(new Uint8Array(HEAPU8.buffer,addr,size));return buffer}toString(){if(!this.addr){return""}const addr=Module._wabt_output_buffer_get_data(this.addr);const size=Module._wabt_output_buffer_get_size(this.addr);return UTF8ToString(addr,size)}destroy(){Module._wabt_destroy_output_buffer(this.addr)}}class Errors{constructor(kind){this.kind=kind;this.addr=Module._wabt_new_errors()}format(lexer=null){let buffer;switch(this.kind){case"text":buffer=new OutputBuffer(Module._wabt_format_text_errors(this.addr,lexer.addr));break;case"binary":buffer=new OutputBuffer(Module._wabt_format_binary_errors(this.addr));break;default:throw new Error(`Invalid Errors kind: ${this.kind}`)}const message=buffer.toString();buffer.destroy();return message}destroy(){Module._wabt_destroy_errors(this.addr)}}function parseWat(filename,buffer,options){let errors=new Errors("text");let lexer=new Lexer(filename,buffer,errors);const features=new Features(options||{});let parseResult_addr;try{parseResult_addr=Module._wabt_parse_wat(lexer.addr,features.addr,errors.addr);const result=Module._wabt_parse_wat_result_get_result(parseResult_addr);if(result!==WABT_OK){throw new Error("parseWat failed:\n"+errors.format(lexer))}const module_addr=Module._wabt_parse_wat_result_release_module(parseResult_addr);const wasmModule=new WasmModule(module_addr,errors,lexer);errors=null;lexer=null;return wasmModule}finally{Module._wabt_destroy_parse_wat_result(parseResult_addr);features.destroy();if(errors){errors.destroy()}if(lexer){lexer.destroy()}}}function readWasm(buffer,options={}){const bufferObj=allocateBuffer(buffer);let errors=new Errors("binary");const readDebugNames=options.readDebugNames??false;const check=options.check??true;const features=new Features(options);let readBinaryResult_addr;try{readBinaryResult_addr=Module._wabt_read_binary(bufferObj.addr,bufferObj.size,readDebugNames,features.addr,errors.addr);const result=Module._wabt_read_binary_result_get_result(readBinaryResult_addr);if(check&&result!==WABT_OK){throw new Error("readWasm failed:\n"+errors.format())}const module_addr=Module._wabt_read_binary_result_release_module(readBinaryResult_addr);const wasmModule=new WasmModule(module_addr,errors);errors=null;return wasmModule}finally{Module._wabt_destroy_read_binary_result(readBinaryResult_addr);features.destroy();if(errors){errors.destroy()}Module._free(bufferObj.addr)}}class WasmModule{constructor(module_addr,errors,lexer=null){this.module_addr=module_addr;this.errors=errors;this.lexer=lexer}validate(options){const features=new Features(options||{});try{const result=Module._wabt_validate_module(this.module_addr,features.addr,this.errors.addr);if(result!==WABT_OK){throw new Error("validate failed:\n"+this.errors.format(this.lexer))}}finally{features.destroy()}}generateNames(){const result=Module._wabt_generate_names_module(this.module_addr);if(result!==WABT_OK){throw new Error("generateNames failed.")}}applyNames(){const result=Module._wabt_apply_names_module(this.module_addr);if(result!==WABT_OK){throw new Error("applyNames failed.")}}toText(options={}){const foldExprs=options.foldExprs??false;const inlineExport=options.inlineExport??false;const writeModuleResult_addr=Module._wabt_write_text_module(this.module_addr,foldExprs,inlineExport);const result=Module._wabt_write_module_result_get_result(writeModuleResult_addr);let outputBuffer;try{if(result!==WABT_OK){throw new Error("toText failed.")}outputBuffer=new OutputBuffer(Module._wabt_write_module_result_release_output_buffer(writeModuleResult_addr));return outputBuffer.toString()}finally{if(outputBuffer){outputBuffer.destroy()}Module._wabt_destroy_write_module_result(writeModuleResult_addr)}}toBinary(options={}){const log=options.log??false;const canonicalize_lebs=options.canonicalize_lebs??true;const relocatable=options.relocatable??false;const write_debug_names=options.write_debug_names??false;const writeModuleResult_addr=Module._wabt_write_binary_module(this.module_addr,log,canonicalize_lebs,relocatable,write_debug_names);const result=Module._wabt_write_module_result_get_result(writeModuleResult_addr);let binaryOutputBuffer;let logOutputBuffer;try{if(result!==WABT_OK){throw new Error("toBinary failed.")}binaryOutputBuffer=new OutputBuffer(Module._wabt_write_module_result_release_output_buffer(writeModuleResult_addr));logOutputBuffer=new OutputBuffer(Module._wabt_write_module_result_release_log_output_buffer(writeModuleResult_addr));return{buffer:binaryOutputBuffer.toTypedArray(),log:logOutputBuffer.toString()}}finally{if(binaryOutputBuffer){binaryOutputBuffer.destroy()}if(logOutputBuffer){logOutputBuffer.destroy()}Module._wabt_destroy_write_module_result(writeModuleResult_addr)}}destroy(){Module._wabt_destroy_module(this.module_addr);if(this.errors){this.errors.destroy()}if(this.lexer){this.lexer.destroy()}}}Module["parseWat"]=parseWat;Module["readWasm"]=readWasm;Module["FEATURES"]=FEATURES;if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}
;return moduleRtn}export default WabtModule;
================================================
FILE: docs/demo/share.js
================================================
/*
* Copyright 2026 WebAssembly Community Group participants
*
* 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.
*/
export function getLocalStorageFeatures() {
try {
return JSON.parse(localStorage && localStorage.getItem('features')) || {};
} catch (e) {
console.log(e);
return {};
}
}
export function saveLocalStorageFeatures(features) {
if (localStorage) {
localStorage.setItem('features', JSON.stringify(features));
}
}
export function renderFeatures(wabt, features, onChange) {
const featuresEl = document.getElementById('features');
const featuresList =
Object.entries(wabt.FEATURES).sort(([a], [b]) => a.localeCompare(b));
for (const [f, v] of featuresList) {
const featureEl = document.createElement('input');
featureEl.type = 'checkbox';
featureEl.id = f;
const isChecked = !!(features[f] !== undefined ? features[f] : v);
featureEl.checked = isChecked;
features[f] = isChecked;
featureEl.addEventListener('change', event => {
features[event.target.id] = event.target.checked;
if (onChange) {
onChange();
}
});
const labelEl = document.createElement('label');
labelEl.htmlFor = f;
labelEl.textContent = f.replace(/_/g, ' ');
const itemEl = document.createElement('div');
itemEl.className = 'feature-item';
itemEl.appendChild(featureEl);
itemEl.appendChild(labelEl);
featuresEl.appendChild(itemEl);
}
}
================================================
FILE: docs/demo/third_party/.gitignore
================================================
node_modules
================================================
FILE: docs/demo/third_party/README.md
================================================
# WABT Demo Third-Party Dependencies
This directory contains the build configuration for third-party dependencies
used by the WABT web demos (located in `docs/demo`).
Currently, this is used to generate a single ES Module bundle for **CodeMirror
6**, which is required because CodeMirror 6 consists of many highly-scoped NPM
packages that are difficult to load individually via CDNs in a browser without
instance-duplication issues.
## Building the Third-Party Bundle
The demo applications (`wasm2wat/index.html` and `wat2wasm/index.html`) expect
to find a compiled bundle at `docs/demo/third_party.bundle.js`.
To regenerate this bundle:
1. Ensure you have [Node.js and npm](https://nodejs.org/) installed.
2. From this directory (`docs/demo/third_party`), execute:
```bash
npm install
npm run build
```
The `build` script uses `esbuild` to analyze `index.js`, tree-shake the used
modules (like `EditorView`, `wast` syntax highlighting, and `javascript`
support), and output the final ES Module bundle as `../third_party.bundle.js`.
## Adding or Updating Dependencies
1. If you need to expose new CodeMirror features to the demo apps, add the
relevant `export` statement to `index.js`.
2. To update versions of CodeMirror, run `npm update` or manually adjust
`package.json` and run `npm install`.
3. Commit both the updated `package.json`/`package-lock.json` and the built
`../third_party.bundle.js`.
================================================
FILE: docs/demo/third_party/index.js
================================================
/*
* Copyright 2026 WebAssembly Community Group participants
*
* 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.
*/
export {javascript} from '@codemirror/lang-javascript';
export {StreamLanguage} from '@codemirror/language';
export {wast} from '@codemirror/legacy-modes/mode/wast';
export {EditorState} from '@codemirror/state';
export {basicSetup, EditorView} from 'codemirror';
export {default as Split} from 'split.js';
================================================
FILE: docs/demo/third_party/package.json
================================================
{
"name": "third_party",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "esbuild index.js --bundle --format=esm --minify --sourcemap --outfile=../third_party.bundle.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "commonjs",
"dependencies": {
"@codemirror/commands": "^6.10.3",
"@codemirror/lang-javascript": "^6.2.5",
"@codemirror/language": "^6.12.2",
"@codemirror/legacy-modes": "^6.5.2",
"@codemirror/state": "^6.6.0",
"@codemirror/view": "^6.40.0",
"codemirror": "^6.0.2",
"esbuild": "^0.27.4",
"split.js": "^1.6.5"
}
}
================================================
FILE: docs/demo/third_party.bundle.js
================================================
var cp=0,Ui=class{constructor(e,t){this.from=e,this.to=t}},z=class{constructor(e={}){this.id=cp++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=pe.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}};z.closedBy=new z({deserialize:n=>n.split(" ")});z.openedBy=new z({deserialize:n=>n.split(" ")});z.group=new z({deserialize:n=>n.split(" ")});z.isolate=new z({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});z.contextHash=new z({perNode:!0});z.lookAhead=new z({perNode:!0});z.mounted=new z({perNode:!0});var Nt=class{constructor(e,t,i,s=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=s}static get(e){return e&&e.props&&e.props[z.mounted.id]}},fp=Object.create(null),pe=class n{constructor(e,t,i,s=0){this.name=e,this.props=t,this.id=i,this.flags=s}static define(e){let t=e.props&&e.props.length?Object.create(null):fp,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),s=new n(e.name||"",t,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[r[0].id]=r[1]}}return s}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(z.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let s of i.split(" "))t[s]=e[i];return i=>{for(let s=i.prop(z.group),r=-1;r<(s?s.length:0);r++){let o=t[r<0?i.name:s[r]];if(o)return o}}}};pe.none=new pe("",Object.create(null),0,8);var xi=class n{constructor(e){this.types=e;for(let t=0;t<e.length;t++)if(e[t].id!=t)throw new RangeError("Node type ids should correspond to array positions when creating a node set")}extend(...e){let t=[];for(let i of this.types){let s=null;for(let r of e){let o=r(i);if(o){s||(s=Object.assign({},i.props));let l=o[1],a=o[0];a.combine&&a.id in s&&(l=a.combine(s[a.id],l)),s[a.id]=l}}t.push(s?new pe(i.name,s,i.id,i.flags):i)}return new n(t)}},Un=new WeakMap,th=new WeakMap,J;(function(n){n[n.ExcludeBuffers=1]="ExcludeBuffers",n[n.IncludeAnonymous=2]="IncludeAnonymous",n[n.IgnoreMounts=4]="IgnoreMounts",n[n.IgnoreOverlays=8]="IgnoreOverlays",n[n.EnterBracketed=16]="EnterBracketed"})(J||(J={}));var U=class n{constructor(e,t,i,s,r){if(this.type=e,this.children=t,this.positions=i,this.length=s,this.props=null,r&&r.length){this.props=Object.create(null);for(let[o,l]of r)this.props[typeof o=="number"?o:o.id]=l}}toString(){let e=Nt.get(this);if(e&&!e.overlay)return e.tree.toString();let t="";for(let i of this.children){let s=i.toString();s&&(t&&(t+=","),t+=s)}return this.type.name?(/\W/.test(this.type.name)&&!this.type.isError?JSON.stringify(this.type.name):this.type.name)+(t.length?"("+t+")":""):t}cursor(e=0){return new Hi(this.topNode,e)}cursorAt(e,t=0,i=0){let s=Un.get(this)||this.topNode,r=new Hi(s);return r.moveTo(e,t),Un.set(this,r._tree),r}get topNode(){return new Ne(this,0,0,null)}resolve(e,t=0){let i=Fi(Un.get(this)||this.topNode,e,t,!1);return Un.set(this,i),i}resolveInner(e,t=0){let i=Fi(th.get(this)||this.topNode,e,t,!0);return th.set(this,i),i}resolveStack(e,t=0){return up(this,e,t)}iterate(e){let{enter:t,leave:i,from:s=0,to:r=this.length}=e,o=e.mode||0,l=(o&J.IncludeAnonymous)>0;for(let a=this.cursor(o|J.IncludeAnonymous);;){let h=!1;if(a.from<=r&&a.to>=s&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Ur(pe.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,s)=>new n(this.type,t,i,s,this.propValues),e.makeTree||((t,i,s)=>new n(pe.none,t,i,s)))}static build(e){return dp(e)}};U.empty=new U(pe.none,[],[],0);var Ir=class n{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new n(this.buffer,this.index)}},Zt=class n{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return pe.none}toString(){let e=[];for(let t=0;t<this.buffer.length;)e.push(this.childString(t)),t=this.buffer[t+3];return e.join(",")}childString(e){let t=this.buffer[e],i=this.buffer[e+3],s=this.set.types[t],r=s.name;if(/\W/.test(r)&&!s.isError&&(r=JSON.stringify(r)),e+=4,i==e)return r;let o=[];for(;e<i;)o.push(this.childString(e)),e=this.buffer[e+3];return r+"("+o.join(",")+")"}findChild(e,t,i,s,r){let{buffer:o}=this,l=-1;for(let a=e;a!=t&&!(sh(r,s,o[a+1],o[a+2])&&(l=a,i>0));a=o[a+3]);return l}slice(e,t,i){let s=this.buffer,r=new Uint16Array(t-e),o=0;for(let l=e,a=0;l<t;){r[a++]=s[l++],r[a++]=s[l++]-i;let h=r[a++]=s[l++]-i;r[a++]=s[l++]-e,o=Math.max(o,h)}return new n(r,o,this.set)}};function sh(n,e,t,i){switch(n){case-2:return t<e;case-1:return i>=e&&t<e;case 0:return t<e&&i>e;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function Fi(n,e,t,i){for(var s;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to<e);){let o=!i&&n instanceof Ne&&n.index<0?null:n.parent;if(!o)return n;n=o}let r=i?0:J.IgnoreOverlays;if(i)for(let o=n,l=o.parent;l;o=l,l=o.parent)o instanceof Ne&&o.index<0&&((s=l.enter(e,t,r))===null||s===void 0?void 0:s.from)!=o.from&&(n=l);for(;;){let o=n.enter(e,t,r);if(!o)return n;n=o}}var Hn=class{cursor(e=0){return new Hi(this,e)}getChild(e,t=null,i=null){let s=ih(this,e,t,i);return s.length?s[0]:null}getChildren(e,t=null,i=null){return ih(this,e,t,i)}resolve(e,t=0){return Fi(this,e,t,!1)}resolveInner(e,t=0){return Fi(this,e,t,!0)}matchContext(e){return qr(this.parent,e)}enterUnfinishedNodesBefore(e){let t=this.childBefore(e),i=this;for(;t;){let s=t.lastChild;if(!s||s.to!=t.to)break;s.type.isError&&s.from==s.to?(i=t,t=s.prevSibling):t=s}return i}get node(){return this}get next(){return this.parent}},Ne=class n extends Hn{constructor(e,t,i,s){super(),this._tree=e,this.from=t,this.index=i,this._parent=s}get type(){return this._tree.type}get name(){return this._tree.type.name}get to(){return this.from+this._tree.length}nextChild(e,t,i,s,r=0){for(let o=this;;){for(let{children:l,positions:a}=o._tree,h=t>0?l.length:-1;e!=h;e+=t){let c=l[e],f=a[e]+o.from,u;if(!(!(r&J.EnterBracketed&&c instanceof U&&(u=Nt.get(c))&&!u.overlay&&u.bracketed&&i>=f&&i<=f+c.length)&&!sh(s,i,f,f+c.length))){if(c instanceof Zt){if(r&J.ExcludeBuffers)continue;let d=c.findChild(0,c.buffer.length,t,i-f,s);if(d>-1)return new Gt(new Vr(o,c,e,f),null,d)}else if(r&J.IncludeAnonymous||!c.type.isAnonymous||Gr(c)){let d;if(!(r&J.IgnoreMounts)&&(d=Nt.get(c))&&!d.overlay)return new n(d.tree,f,e,o);let p=new n(c,f,e,o);return r&J.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?c.children.length-1:0,t,i,s,r)}}}if(r&J.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let s;if(!(i&J.IgnoreOverlays)&&(s=Nt.get(this._tree))&&s.overlay){let r=e-this.from,o=i&J.EnterBracketed&&s.bracketed;for(let{from:l,to:a}of s.overlay)if((t>0||o?l<=r:l<r)&&(t<0||o?a>=r:a>r))return new n(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function ih(n,e,t,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(t!=null){for(let o=!1;!o;)if(o=s.type.is(t),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function qr(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}var Vr=class{constructor(e,t,i,s){this.parent=e,this.buffer=t,this.index=i,this.start=s}},Gt=class n extends Hn{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.context.start,i);return r<0?null:new n(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&J.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return r<0?null:new n(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new n(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new n(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];e.push(i.slice(s,r,o)),t.push(0)}return new U(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function rh(n){if(!n.length)return null;let e=0,t=n[0];for(let r=1;r<n.length;r++){let o=n[r];(o.from>t.from||o.to<t.to)&&(t=o,e=r)}let i=t instanceof Ne&&t.index<0?null:t.parent,s=n.slice();return i?s[e]=i:s.splice(e,1),new jr(s,t)}var jr=class{constructor(e,t){this.heads=e,this.node=t}get next(){return rh(this.heads)}};function up(n,e,t){let i=n.resolveInner(e,t),s=null;for(let r=i instanceof Ne?i:i.context.parent;r;r=r.parent)if(r.index<0){let o=r.parent;(s||(s=[i])).push(o.resolve(e,t)),r=o}else{let o=Nt.get(r.tree);if(o&&o.overlay&&o.overlay[0].from<=e&&o.overlay[o.overlay.length-1].to>=e){let l=new Ne(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(Fi(l,e,t,!1))}}return s?rh(s):i}var Hi=class{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~J.EnterBracketed,e instanceof Ne)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:s}=this.buffer;return this.type=t||s.set.types[s.buffer[e]],this.from=i+s.buffer[e+1],this.to=i+s.buffer[e+2],!0}yield(e){return e?e instanceof Ne?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&J.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&J.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&J.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(t.findChild(s,this.index,-1,0,4))}else{let s=t.buffer[this.index+3];if(s<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:s}=this;if(s){if(e>0){if(this.index<s.buffer.buffer.length)return!1}else for(let r=0;r<this.index;r++)if(s.buffer.buffer[r+3]<this.index)return!1;({index:t,parent:i}=s)}else({index:t,_parent:i}=this._tree);for(;i;{index:t,_parent:i}=i)if(t>-1)for(let r=t+e,o=e<0?-1:i._tree.children.length;r!=o;r+=e){let l=i._tree.children[r];if(this.mode&J.IncludeAnonymous||l instanceof Zt||!l.type.isAnonymous||Gr(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to<e))&&this.parent(););for(;this.enterChild(1,e,t););return this}get node(){if(!this.buffer)return this._tree;let e=this.bufferNode,t=null,i=0;if(e&&e.context==this.buffer)e:for(let s=this.index,r=this.stack.length;r>=0;){for(let o=e;o;o=o._parent)if(o.index==s){if(s==this.index)return o;t=o,i=r+1;break e}s=this.stack[--r]}for(let s=i;s<this.stack.length;s++)t=new Gt(this.buffer,t,this.stack[s]);return this.bufferNode=new Gt(this.buffer,t,this.index)}get tree(){return this.buffer?null:this._tree._tree}iterate(e,t){for(let i=0;;){let s=!1;if(this.type.isAnonymous||e(this)!==!1){if(this.firstChild()){i++;continue}this.type.isAnonymous||(s=!0)}for(;;){if(s&&t&&t(this),s=this.type.isAnonymous,!i)return;if(this.nextSibling())break;this.parent(),i--,s=!0}}}matchContext(e){if(!this.buffer)return qr(this.node.parent,e);let{buffer:t}=this.buffer,{types:i}=t.set;for(let s=e.length-1,r=this.stack.length-1;s>=0;r--){if(r<0)return qr(this._tree,e,s);let o=i[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[s]&&e[s]!=o.name)return!1;s--}}return!0}};function Gr(n){return n.children.some(e=>e instanceof Zt||!e.type.isAnonymous||Gr(e))}function dp(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:s=1024,reused:r=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new Ir(t,t.length):t,a=i.types,h=0,c=0;function f(w,v,Q,D,W,G){let{id:_,start:X,end:Y,size:q}=l,j=c,fe=h;if(q<0)if(l.next(),q==-1){let Ve=r[_];Q.push(Ve),D.push(X-w);return}else if(q==-3){h=_;return}else if(q==-4){c=_;return}else throw new RangeError(`Unrecognized record size: ${q}`);let ye=a[_],qe,oe,Te=X-w;if(Y-X<=s&&(oe=m(l.pos-v,W))){let Ve=new Uint16Array(oe.size-oe.skip),Ce=l.pos-oe.size,je=Ve.length;for(;l.pos>Ce;)je=g(oe.start,Ve,je);qe=new Zt(Ve,Y-oe.start,i),Te=oe.start-w}else{let Ve=l.pos-q;l.next();let Ce=[],je=[],ke=_>=o?_:-1,bt=0,yi=Y;for(;l.pos>Ve;)ke>=0&&l.id==ke&&l.size>=0?(l.end<=yi-s&&(p(Ce,je,X,bt,l.end,yi,ke,j,fe),bt=Ce.length,yi=l.end),l.next()):G>2500?u(X,Ve,Ce,je):f(X,Ve,Ce,je,ke,G+1);if(ke>=0&&bt>0&&bt<Ce.length&&p(Ce,je,X,bt,X,yi,ke,j,fe),Ce.reverse(),je.reverse(),ke>-1&&bt>0){let jn=d(ye,fe);qe=Ur(ye,Ce,je,0,Ce.length,0,Y-X,jn,jn)}else qe=O(ye,Ce,je,Y-X,j-Y,fe)}Q.push(qe),D.push(Te)}function u(w,v,Q,D){let W=[],G=0,_=-1;for(;l.pos>v;){let{id:X,start:Y,end:q,size:j}=l;if(j>4)l.next();else{if(_>-1&&Y<_)break;_<0&&(_=q-s),W.push(X,Y,q),G++,l.next()}}if(G){let X=new Uint16Array(G*4),Y=W[W.length-2];for(let q=W.length-3,j=0;q>=0;q-=3)X[j++]=W[q],X[j++]=W[q+1]-Y,X[j++]=W[q+2]-Y,X[j++]=j;Q.push(new Zt(X,W[2]-Y,i)),D.push(Y-w)}}function d(w,v){return(Q,D,W)=>{let G=0,_=Q.length-1,X,Y;if(_>=0&&(X=Q[_])instanceof U){if(!_&&X.type==w&&X.length==W)return X;(Y=X.prop(z.lookAhead))&&(G=D[_]+X.length+Y)}return O(w,Q,D,W,G,v)}}function p(w,v,Q,D,W,G,_,X,Y){let q=[],j=[];for(;w.length>D;)q.push(w.pop()),j.push(v.pop()+Q-W);w.push(O(i.types[_],q,j,G-W,X-G,Y)),v.push(W-Q)}function O(w,v,Q,D,W,G,_){if(G){let X=[z.contextHash,G];_=_?[X].concat(_):[X]}if(W>25){let X=[z.lookAhead,W];_=_?[X].concat(_):[X]}return new U(w,v,Q,D,_)}function m(w,v){let Q=l.fork(),D=0,W=0,G=0,_=Q.end-s,X={size:0,start:0,skip:0};e:for(let Y=Q.pos-w;Q.pos>Y;){let q=Q.size;if(Q.id==v&&q>=0){X.size=D,X.start=W,X.skip=G,G+=4,D+=4,Q.next();continue}let j=Q.pos-q;if(q<0||j<Y||Q.start<_)break;let fe=Q.id>=o?4:0,ye=Q.start;for(Q.next();Q.pos>j;){if(Q.size<0)if(Q.size==-3||Q.size==-4)fe+=4;else break e;else Q.id>=o&&(fe+=4);Q.next()}W=ye,D+=q,G+=fe}return(v<0||D==w)&&(X.size=D,X.start=W,X.skip=G),X.size>4?X:void 0}function g(w,v,Q){let{id:D,start:W,end:G,size:_}=l;if(l.next(),_>=0&&D<o){let X=Q;if(_>4){let Y=l.pos-(_-4);for(;l.pos>Y;)Q=g(w,v,Q)}v[--Q]=X,v[--Q]=G-w,v[--Q]=W-w,v[--Q]=D}else _==-3?h=D:_==-4&&(c=D);return Q}let S=[],b=[];for(;l.pos>0;)f(n.start||0,n.bufferStart||0,S,b,-1,0);let A=(e=n.length)!==null&&e!==void 0?e:S.length?b[0]+S[0].length:0;return new U(a[n.topID],S.reverse(),b.reverse(),A)}var nh=new WeakMap;function Fn(n,e){if(!n.isAnonymous||e instanceof Zt||e.type!=n)return 1;let t=nh.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof U)){t=1;break}t+=Fn(n,i)}nh.set(e,t)}return t}function Ur(n,e,t,i,s,r,o,l,a){let h=0;for(let p=i;p<s;p++)h+=Fn(n,e[p]);let c=Math.ceil(h*1.5/8),f=[],u=[];function d(p,O,m,g,S){for(let b=m;b<g;){let A=b,w=O[b],v=Fn(n,p[b]);for(b++;b<g;b++){let Q=Fn(n,p[b]);if(v+Q>=c)break;v+=Q}if(b==A+1){if(v>c){let Q=p[A];d(Q.children,Q.positions,0,Q.children.length,O[A]+S);continue}f.push(p[A])}else{let Q=O[b-1]+p[b-1].length-w;f.push(Ur(n,p,O,A,b,w,Q,null,a))}u.push(w+S-r)}}return d(e,t,i,s,0),(l||a)(f,u,o)}var Kn=class{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let s=this.map.get(e);s||this.map.set(e,s=new Map),s.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof Gt?this.setBuffer(e.context.buffer,e.index,t):e instanceof Ne&&this.map.set(e.tree,t)}get(e){return e instanceof Gt?this.getBuffer(e.context.buffer,e.index):e instanceof Ne?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}},Ut=class n{constructor(e,t,i,s,r=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let s=[new n(0,e.length,e,0,!1,i)];for(let r of t)r.to>e.length&&s.push(r);return s}static applyChanges(e,t,i=128){if(!t.length)return e;let s=[],r=1,o=e.length?e[0]:null;for(let l=0,a=0,h=0;;l++){let c=l<t.length?t[l]:null,f=c?c.fromA:1e9;if(f-a>=i)for(;o&&o.from<f;){let u=o;if(a>=u.from||f<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,f)-h;u=d>=p?null:new n(d,p,u.tree,u.offset+h,l>0,!!c)}if(u&&s.push(u),o.to>f)break;o=r<e.length?e[r++]:null}if(!c)break;a=c.toA,h=c.toA-c.toB}return s}},Ft=class{startParse(e,t,i){return typeof e=="string"&&(e=new Nr(e)),i=i?i.length?i.map(s=>new Ui(s.from,s.to)):[new Ui(0,0)]:[new Ui(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let s=this.startParse(e,t,i);for(;;){let r=s.advance();if(r)return r}}},Nr=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};var sx=new z({perNode:!0});var Kr=class n{constructor(e,t,i,s,r,o,l,a,h,c=0,f){this.p=e,this.stack=t,this.state=i,this.reducePos=s,this.pos=r,this.score=o,this.buffer=l,this.bufferBase=a,this.curContext=h,this.lookAhead=c,this.parent=f}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let s=e.parser.context;return new n(e,[],t,i,i,0,[],0,s?new Jn(s,s.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,s=e&65535,{parser:r}=this.p,o=this.reducePos<this.pos-25&&this.setLookAhead(this.pos),l=r.dynamicPrecedence(s);if(l&&(this.score+=l),i==0){this.pushState(r.getGoto(this.state,s,!0),this.reducePos),s<r.minRepeatTerm&&this.storeNode(s,this.reducePos,this.reducePos,o?8:4,!0),this.reduceContext(s,this.reducePos);return}let a=this.stack.length-(i-1)*3-(e&262144?6:0),h=a?this.stack[a-2]:this.p.ranges[0].from,c=this.reducePos-h;c>=2e3&&!(!((t=this.p.parser.nodeSet.types[s])===null||t===void 0)&&t.isAnonymous)&&(h==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=c):this.p.lastBigReductionSize<c&&(this.p.bigReductionCount=1,this.p.lastBigReductionStart=h,this.p.lastBigReductionSize=c));let f=a?this.stack[a-1]:0,u=this.bufferBase+this.buffer.length-f;if(s<r.minRepeatTerm||e&131072){let d=r.stateFlag(this.state,1)?this.pos:this.reducePos;this.storeNode(s,h,d,u+4,!0)}if(e&262144)this.state=this.stack[a];else{let d=this.stack[a-3];this.state=r.getGoto(d,s,!0)}for(;this.stack.length>a;)this.stack.pop();this.reduceContext(s,h)}storeNode(e,t,i,s=4,r=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]<this.buffer.length+this.bufferBase)){let o=this,l=this.buffer.length;if(l==0&&o.parent&&(l=o.bufferBase-o.parent.bufferBase,o=o.parent),l>0&&o.buffer[l-4]==0&&o.buffer[l-1]>-1){if(t==i)return;if(o.buffer[l-2]>=t){o.buffer[l-2]=i;return}}}if(!r||this.pos==i)this.buffer.push(e,t,i,s);else{let o=this.buffer.length;if(o>0&&(this.buffer[o-4]!=0||this.buffer[o-1]<0)){let l=!1;for(let a=o;a>0&&this.buffer[a-2]>i;a-=4)if(this.buffer[a-1]>=0){l=!0;break}if(l)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,s>4&&(s-=4)}this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=s}}shift(e,t,i,s){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let r=e,{parser:o}=this.p;this.pos=s;let l=o.stateFlag(r,1);!l&&(s>i||t<=o.maxNode)&&(this.reducePos=s),this.pushState(r,l?i:Math.min(i,this.reducePos)),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,s,4)}else this.pos=s,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,s,4)}apply(e,t,i,s){e&65536?this.reduce(e):this.shift(e,t,i,s)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let s=this.pos;this.reducePos=this.pos=s+e.length,this.pushState(t,s),this.buffer.push(i,s,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),s=e.bufferBase+t;for(;e&&s==e.bufferBase;)e=e.parent;return new n(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,s,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new Jr(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let s=[];for(let r=0,o;r<t.length;r+=2)(o=t[r+1])!=this.state&&this.p.parser.hasAction(o,e)&&s.push(t[r],o);if(this.stack.length<120)for(let r=0;s.length<8&&r<t.length;r+=2){let o=t[r+1];s.some((l,a)=>a&1&&l==o)||s.push(t[r],o)}t=s}let i=[];for(let s=0;s<t.length&&i.length<4;s+=2){let r=t[s+1];if(r==this.state)continue;let o=this.split();o.pushState(r,this.pos),o.storeNode(0,o.pos,o.pos,4,!0),o.shiftContext(t[s],this.pos),o.reducePos=this.pos,o.score-=200,i.push(o)}return i}forceReduce(){let{parser:e}=this.p,t=e.stateSlot(this.state,5);if((t&65536)==0)return!1;if(!e.validAction(this.state,t)){let i=t>>19,s=t&65535,r=this.stack.length-i*3;if(r<0||e.getGoto(this.stack[r],s,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(s,r)=>{if(!t.includes(s))return t.push(s),e.allActions(s,o=>{if(!(o&393216))if(o&65536){let l=(o>>19)-r;if(l>1){let a=o&65535,h=this.stack.length-l*3;if(h>=0&&e.getGoto(this.stack[h],a,!1)>=0)return l<<19|65536|a}}else{let l=i(o,r+1);if(l!=null)return l}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t<this.stack.length;t+=3)if(this.stack[t]!=e.stack[t])return!1;return!0}get parser(){return this.p.parser}dialectEnabled(e){return this.p.parser.dialect.flags[e]}shiftContext(e,t){this.curContext&&this.updateContext(this.curContext.tracker.shift(this.curContext.context,e,this,this.p.stream.reset(t)))}reduceContext(e,t){this.curContext&&this.updateContext(this.curContext.tracker.reduce(this.curContext.context,e,this,this.p.stream.reset(t)))}emitContext(){let e=this.buffer.length-1;(e<0||this.buffer[e]!=-3)&&this.buffer.push(this.curContext.hash,this.pos,this.pos,-3)}emitLookAhead(){let e=this.buffer.length-1;(e<0||this.buffer[e]!=-4)&&this.buffer.push(this.lookAhead,this.pos,this.pos,-4)}updateContext(e){if(e!=this.curContext.context){let t=new Jn(this.curContext.tracker,e);t.hash!=this.curContext.hash&&this.emitContext(),this.curContext=t}}setLookAhead(e){return e<=this.lookAhead?!1:(this.emitLookAhead(),this.lookAhead=e,!0)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}},Jn=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},Jr=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let s=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=s}},eo=class n{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new n(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new n(this.stack,this.pos,this.index)}};function Ki(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let i=0,s=0;i<n.length;){let r=0;for(;;){let o=n.charCodeAt(i++),l=!1;if(o==126){r=65535;break}o>=92&&o--,o>=34&&o--;let a=o-32;if(a>=46&&(a-=46,l=!0),r+=a,l)break;r*=46}t?t[s++]=r:t=new e(r)}return t}var bi=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},oh=new bi,to=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=oh,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,s=this.rangeIndex,r=this.pos+e;for(;r<i.from;){if(!s)return null;let o=this.ranges[--s];r-=i.from-o.to,i=o}for(;t<0?r>i.to:r>=i.to;){if(s==this.ranges.length-1)return null;let o=this.ranges[++s];r+=o.from-i.to,i=o}return r}clipPos(e){if(e>=this.range.from&&e<this.range.to)return e;for(let t of this.ranges)if(t.to>e)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,s;if(t>=0&&t<this.chunk.length)i=this.pos+e,s=this.chunk.charCodeAt(t);else{let r=this.resolveOffset(e,1);if(r==null)return-1;if(i=r,i>=this.chunk2Pos&&i<this.chunk2Pos+this.chunk2.length)s=this.chunk2.charCodeAt(i-this.chunk2Pos);else{let o=this.rangeIndex,l=this.range;for(;l.to<=i;)l=this.ranges[++o];this.chunk2=this.input.chunk(this.chunk2Pos=i),i+this.chunk2.length>l.to&&(this.chunk2=this.chunk2.slice(0,l.to-i)),s=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),s}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i<this.token.start)throw new RangeError("Token end out of bounds");this.token.value=e,this.token.end=i}acceptTokenTo(e,t){this.token.value=e,this.token.end=t}getChunk(){if(this.pos>=this.chunk2Pos&&this.pos<this.chunk2Pos+this.chunk2.length){let{chunk:e,chunkPos:t}=this;this.chunk=this.chunk2,this.chunkPos=this.chunk2Pos,this.chunk2=e,this.chunk2Pos=t,this.chunkOff=this.pos-this.chunkPos}else{this.chunk2=this.chunk,this.chunk2Pos=this.chunkPos;let e=this.input.chunk(this.pos),t=this.pos+e.length;this.chunk=t>this.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=oh,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e<this.range.from;)this.range=this.ranges[--this.rangeIndex];for(;e>=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e<this.chunkPos+this.chunk.length?this.chunkOff=e-this.chunkPos:(this.chunk="",this.chunkOff=0),this.readNext()}return this}read(e,t){if(e>=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let s of this.ranges){if(s.from>=t)break;s.to>e&&(i+=this.input.read(Math.max(s.from,e),Math.min(s.to,t)))}return i}},At=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;fh(this.data,e,t,this.id,i.data,i.tokenPrecTable)}};At.prototype.contextual=At.prototype.fallback=At.prototype.extend=!1;var Si=class{constructor(e,t,i){this.precTable=t,this.elseToken=i,this.data=typeof e=="string"?Ki(e):e}token(e,t){let i=e.pos,s=0;for(;;){let r=e.next<0,o=e.resolveOffset(1,1);if(fh(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(r||s++,o==null)break;e.reset(o,e.token)}s&&(e.reset(i,e.token),e.acceptToken(this.elseToken,s))}};Si.prototype.contextual=At.prototype.fallback=At.prototype.extend=!1;var Mt=class{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}};function fh(n,e,t,i,s,r){let o=0,l=1<<i,{dialect:a}=t.p.parser;e:for(;(l&n[o])!=0;){let h=n[o+1];for(let d=o+3;d<h;d+=2)if((n[d+1]&l)>0){let p=n[d];if(a.allows(p)&&(e.token.value==-1||e.token.value==p||Op(p,e.token.value,s,r))){e.acceptToken(p);break}}let c=e.next,f=0,u=n[o+2];if(e.next<0&&u>f&&n[h+u*3-3]==65535){o=n[h+u*3-1];continue e}for(;f<u;){let d=f+u>>1,p=h+d+(d<<1),O=n[p],m=n[p+1]||65536;if(c<O)u=d;else if(c>=m)f=d+1;else{o=n[p+2],e.advance();continue e}}break}}function lh(n,e,t){for(let i=e,s;(s=n[i])!=65535;i++)if(s==t)return i-e;return-1}function Op(n,e,t,i){let s=lh(t,i,e);return s<0||lh(t,i,n)<s}var Ee=typeof process<"u"&&process.env&&/\bparse\b/.test(process.env.LOG),Fr=null;function ah(n,e,t){let i=n.cursor(J.IncludeAnonymous);for(i.moveTo(e);;)if(!(t<0?i.childBefore(e):i.childAfter(e)))for(;;){if((t<0?i.to<e:i.from>e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}var io=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?ah(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?ah(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(e<this.nextStart)return null;for(;this.fragment&&this.safeTo<=e;)this.nextFragment();if(!this.fragment)return null;for(;;){let t=this.trees.length-1;if(t<0)return this.nextFragment(),null;let i=this.trees[t],s=this.index[t];if(s==i.children.length){this.trees.pop(),this.start.pop(),this.index.pop();continue}let r=i.children[s],o=this.start[t]+i.positions[s];if(o>e)return this.nextStart=o,null;if(r instanceof U){if(o==e){if(o<this.safeFrom)return null;let l=o+r.length;if(l<=this.safeTo){let a=r.prop(z.lookAhead);if(!a||l+a<this.fragment.to)return r}}this.index[t]++,o+r.length>=Math.max(this.safeFrom,e)&&(this.trees.push(r),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+r.length}}},no=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new bi)}getActions(e){let t=0,i=null,{parser:s}=e.p,{tokenizers:r}=s,o=s.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,a=0;for(let h=0;h<r.length;h++){if((1<<h&o)==0)continue;let c=r[h],f=this.tokens[h];if(!(i&&!c.fallback)&&((c.contextual||f.start!=e.pos||f.mask!=o||f.context!=l)&&(this.updateCachedToken(f,c,e),f.mask=o,f.context=l),f.lookAhead>f.end+25&&(a=Math.max(f.lookAhead,a)),f.value!=0)){let u=t;if(f.extended>-1&&(t=this.addActions(e,f.extended,f.end,t)),t=this.addActions(e,f.value,f.end,t),!c.extend&&(i=f,t>u))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),!i&&e.pos==this.stream.end&&(i=new bi,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new bi,{pos:i,p:s}=e;return t.start=i,t.end=Math.min(i+1,s.stream.end),t.value=i==s.stream.end?s.parser.eofTerm:0,t}updateCachedToken(e,t,i){let s=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(s,e),i),e.value>-1){let{parser:r}=i.p;for(let o=0;o<r.specialized.length;o++)if(r.specialized[o]==e.value){let l=r.specializers[o](this.stream.read(e.start,e.end),i);if(l>=0&&i.p.parser.dialect.allows(l>>1)){(l&1)==0?e.value=l>>1:e.extended=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(s+1)}putAction(e,t,i,s){for(let r=0;r<s;r+=3)if(this.actions[r]==e)return s;return this.actions[s++]=e,this.actions[s++]=t,this.actions[s++]=i,s}addActions(e,t,i,s){let{state:r}=e,{parser:o}=e.p,{data:l}=o;for(let a=0;a<2;a++)for(let h=o.stateSlot(r,a?2:1);;h+=3){if(l[h]==65535)if(l[h+1]==1)h=St(l,h+2);else{s==0&&l[h+1]==2&&(s=this.putAction(St(l,h+2),t,i,s));break}l[h]==t&&(s=this.putAction(St(l,h+1),t,i,s))}return s}},so=class{constructor(e,t,i,s){this.parser=e,this.input=t,this.ranges=s,this.recovering=0,this.nextStackID=9812,this.minStackPos=0,this.reused=[],this.stoppedAt=null,this.lastBigReductionStart=-1,this.lastBigReductionSize=0,this.bigReductionCount=0,this.stream=new to(t,s),this.tokens=new no(e,this.stream),this.topTerm=e.top[1];let{from:r}=s[0];this.stacks=[Kr.start(this,e.top[0],r)],this.fragments=i.length&&this.stream.end-r>e.bufferLength*4?new io(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],s,r;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;o<e.length;o++){let l=e[o];for(;;){if(this.tokens.mainToken=null,l.pos>t)i.push(l);else{if(this.advanceStack(l,i,e))continue;{s||(s=[],r=[]),s.push(l);let a=this.tokens.getMainToken(l);r.push(a.value,a.end)}}break}}if(!i.length){let o=s&&mp(s);if(o)return Ee&&console.log("Finish with "+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw Ee&&s&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&s){let o=this.stoppedAt!=null&&s[0].pos>this.stoppedAt?s[0]:this.runRecovery(s,r,i);if(o)return Ee&&console.log("Force-finish "+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((l,a)=>a.score-l.score);i.length>o;)i.pop();i.some(l=>l.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o<i.length-1;o++){let l=i[o];for(let a=o+1;a<i.length;a++){let h=i[a];if(l.sameState(h)||l.buffer.length>500&&h.buffer.length>500)if((l.score-h.score||l.buffer.length-h.buffer.length)>0)i.splice(a--,1);else{i.splice(o--,1);continue e}}}i.length>12&&(i.sort((o,l)=>l.score-o.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let o=1;o<i.length;o++)i[o].pos<this.minStackPos&&(this.minStackPos=i[o].pos);return null}stopAt(e){if(this.stoppedAt!=null&&this.stoppedAt<e)throw new RangeError("Can't move stoppedAt forward");this.stoppedAt=e}advanceStack(e,t,i){let s=e.pos,{parser:r}=this,o=Ee?this.stackID(e)+" -> ":"";if(this.stoppedAt!=null&&s>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let h=e.curContext&&e.curContext.tracker.strict,c=h?e.curContext.hash:0;for(let f=this.fragments.nodeAt(s);f;){let u=this.parser.nodeSet.types[f.type.id]==f.type?r.getGoto(e.state,f.type.id):-1;if(u>-1&&f.length&&(!h||(f.prop(z.contextHash)||0)==c))return e.useNode(f,u),Ee&&console.log(o+this.stackID(e)+` (via reuse of ${r.getName(f.type.id)})`),!0;if(!(f instanceof U)||f.children.length==0||f.positions[0]>0)break;let d=f.children[0];if(d instanceof U&&f.positions[0]==0)f=d;else break}}let l=r.stateSlot(e.state,4);if(l>0)return e.reduce(l),Ee&&console.log(o+this.stackID(e)+` (via always-reduce ${r.getName(l&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let h=0;h<a.length;){let c=a[h++],f=a[h++],u=a[h++],d=h==a.length||!i,p=d?e:e.split(),O=this.tokens.mainToken;if(p.apply(c,f,O?O.start:p.pos,u),Ee&&console.log(o+this.stackID(p)+` (via ${(c&65536)==0?"shift":`reduce of ${r.getName(c&65535)}`} for ${r.getName(f)} @ ${s}${p==e?"":", split"})`),d)return!0;p.pos>s?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return hh(e,t),!0}}runRecovery(e,t,i){let s=null,r=!1;for(let o=0;o<e.length;o++){let l=e[o],a=t[o<<1],h=t[(o<<1)+1],c=Ee?this.stackID(l)+" -> ":"";if(l.deadEnd&&(r||(r=!0,l.restart(),Ee&&console.log(c+this.stackID(l)+" (restarted)"),this.advanceFully(l,i))))continue;let f=l.split(),u=c;for(let d=0;d<10&&f.forceReduce()&&(Ee&&console.log(u+this.stackID(f)+" (via force-reduce)"),!this.advanceFully(f,i));d++)Ee&&(u=this.stackID(f)+" -> ");for(let d of l.recoverByInsert(a))Ee&&console.log(c+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>l.pos?(h==l.pos&&(h++,a=0),l.recoverByDelete(a,h),Ee&&console.log(c+this.stackID(l)+` (via recover-delete ${this.parser.getName(a)})`),hh(l,i)):(!s||s.score<f.score)&&(s=f)}return s}stackToTree(e){return e.close(),U.build({buffer:eo.create(e),nodeSet:this.parser.nodeSet,topID:this.topTerm,maxBufferLength:this.parser.bufferLength,reused:this.reused,start:this.ranges[0].from,length:e.pos-this.ranges[0].from,minRepeatType:this.parser.minRepeatTerm})}stackID(e){let t=(Fr||(Fr=new WeakMap)).get(e);return t||Fr.set(e,t=String.fromCodePoint(this.nextStackID++)),t+e}};function hh(n,e){for(let t=0;t<e.length;t++){let i=e[t];if(i.pos==n.pos&&i.sameState(n)){e[t].score<n.score&&(e[t]=n);return}}e.push(n)}var ro=class{constructor(e,t,i){this.source=e,this.flags=t,this.disabled=i}allows(e){return!this.disabled||this.disabled[e]==0}},Hr=n=>n,es=class{constructor(e){this.start=e.start,this.shift=e.shift||Hr,this.reduce=e.reduce||Hr,this.reuse=e.reuse||Hr,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}},ts=class n extends Ft{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let l=0;l<e.repeatNodeCount;l++)t.push("");let i=Object.keys(e.topRules).map(l=>e.topRules[l][1]),s=[];for(let l=0;l<t.length;l++)s.push([]);function r(l,a,h){s[l].push([a,a.deserialize(String(h))])}if(e.nodeProps)for(let l of e.nodeProps){let a=l[0];typeof a=="string"&&(a=z[a]);for(let h=1;h<l.length;){let c=l[h++];if(c>=0)r(c,a,l[h++]);else{let f=l[h+-c];for(let u=-c;u>0;u--)r(l[h++],a,f);h++}}}this.nodeSet=new xi(t.map((l,a)=>pe.define({name:a>=this.minRepeatTerm?void 0:l,id:a,props:s[a],top:i.indexOf(a)>-1,error:a==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(a)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let o=Ki(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;l<this.specializerSpecs.length;l++)this.specialized[l]=this.specializerSpecs[l].term;this.specializers=this.specializerSpecs.map(ch),this.states=Ki(e.states,Uint32Array),this.data=Ki(e.stateData),this.goto=Ki(e.goto),this.maxTerm=e.maxTerm,this.tokenizers=e.tokenizers.map(l=>typeof l=="number"?new At(o,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let s=new so(this,e,t,i);for(let r of this.wrappers)s=r(s,e,t,i);return s}getGoto(e,t,i=!1){let s=this.goto;if(t>=s[0])return-1;for(let r=s[t+1];;){let o=s[r++],l=o&1,a=s[r++];if(l&&i)return a;for(let h=r+(o>>1);r<h;r++)if(s[r]==e)return a;if(l)return-1}}hasAction(e,t){let i=this.data;for(let s=0;s<2;s++)for(let r=this.stateSlot(e,s?2:1),o;;r+=3){if((o=i[r])==65535)if(i[r+1]==1)o=i[r=St(i,r+2)];else{if(i[r+1]==2)return St(i,r+2);break}if(o==t||o==0)return St(i,r+1)}return 0}stateSlot(e,t){return this.states[e*6+t]}stateFlag(e,t){return(this.stateSlot(e,0)&t)>0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),s=i?t(i):void 0;for(let r=this.stateSlot(e,1);s==null;r+=3){if(this.data[r]==65535)if(this.data[r+1]==1)r=St(this.data,r+2);else break;s=t(St(this.data,r+1))}return s}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=St(this.data,i+2);else break;if((this.data[i+2]&1)==0){let s=this.data[i+1];t.some((r,o)=>o&1&&r==s)||t.push(this.data[i],s)}}return t}configure(e){let t=Object.assign(Object.create(n.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let s=e.tokenizers.find(r=>r.from==i);return s?s.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,s)=>{let r=e.specializers.find(l=>l.from==i.external);if(!r)return i;let o=Object.assign(Object.assign({},i),{external:r.to});return t.specializers[s]=ch(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let r of e.split(" ")){let o=t.indexOf(r);o>=0&&(i[o]=!0)}let s=null;for(let r=0;r<t.length;r++)if(!i[r])for(let o=this.dialects[t[r]],l;(l=this.data[o++])!=65535;)(s||(s=new Uint8Array(this.maxTerm+1)))[l]=1;return new ro(e,i,s)}static deserialize(e){return new n(e)}};function St(n,e){return n[e]|n[e+1]<<16}function mp(n){let e=null;for(let t of n){let i=t.p.stoppedAt;(t.pos==t.p.stream.end||i!=null&&t.pos>i)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.score<t.score)&&(e=t)}return e}function ch(n){if(n.external){let e=n.extend?1:0;return(t,i)=>n.external(t,i)<<1|e}return n.get}var gp=0,nt=class n{constructor(e,t,i,s){this.name=e,this.set=t,this.base=i,this.modified=s,this.id=gp++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof n&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let s=new n(i,[],null,[]);if(s.set.push(s),t)for(let r of t.set)s.set.push(r);return s}static defineModifier(e){let t=new rs(e);return i=>i.modified.indexOf(t)>-1?i:rs.get(i.base||i,i.modified.concat(t).sort((s,r)=>s.id-r.id))}},yp=0,rs=class n{constructor(e){this.name=e,this.instances=[],this.id=yp++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&xp(t,l.modified));if(i)return i;let s=[],r=new nt(e.name,s,e,t);for(let l of t)l.instances.push(r);let o=bp(t);for(let l of e.set)if(!l.modified.length)for(let a of o)s.push(n.get(l,a));return r}};function xp(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function bp(n){let e=[[]];for(let t=0;t<n.length;t++)for(let i=0,s=e.length;i<s;i++)e.push(e[i].concat(n[t]));return e.sort((t,i)=>i.length-t.length)}function os(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let s of t.split(" "))if(s){let r=[],o=2,l=s;for(let f=0;;){if(l=="..."&&f>0&&f+3==s.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+s);if(r.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),f+=u[0].length,f==s.length)break;let d=s[f++];if(f==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);l=s.slice(f)}let a=r.length-1,h=r[a];if(!h)throw new RangeError("Invalid path: "+s);let c=new Kt(i,o,a>0?r.slice(0,a):null);e[h]=c.sort(e[h])}}return ph.add(e)}var ph=new z({combine(n,e){let t,i,s;for(;n||e;){if(!n||e&&n.depth>=e.depth?(s=e,e=e.next):(s=n,n=n.next),t&&t.mode==s.mode&&!s.context&&!t.context)continue;let r=new Kt(s.tags,s.mode,s.context);t?t.next=r:i=r,t=r}return i}}),Kt=class{constructor(e,t,i,s){this.tags=e,this.mode=t,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth<this.depth?(this.next=e,this):(e.next=this.sort(e.next),e)}get depth(){return this.context?this.context.length:0}};Kt.empty=new Kt([],2,null);function ho(n,e){let t=Object.create(null);for(let r of n)if(!Array.isArray(r.tag))t[r.tag.id]=r.class;else for(let o of r.tag)t[o.id]=r.class;let{scope:i,all:s=null}=e||{};return{style:r=>{let o=s;for(let l of r)for(let a of l.set){let h=t[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function Sp(n,e){let t=null;for(let i of n){let s=i.style(e);s&&(t=t?t+" "+s:s)}return t}function Oh(n,e,t,i=0,s=n.length){let r=new lo(i,Array.isArray(e)?e:[e],t);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}var lo=class{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,s,r){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=s,c=wp(e)||Kt.empty,f=Sp(r,c.tags);if(f&&(h&&(h+=" "),h+=f,c.mode==1&&(s+=(s?" ":"")+f)),this.startSpan(Math.max(t,l),h),c.opaque)return;let u=e.tree&&e.tree.prop(z.mounted);if(u&&u.overlay){let d=e.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(m=>!m.scope||m.scope(u.tree.type)),O=e.firstChild();for(let m=0,g=l;;m++){let S=m<u.overlay.length?u.overlay[m]:null,b=S?S.from+l:a,A=Math.max(t,g),w=Math.min(i,b);if(A<w&&O)for(;e.from<w&&(this.highlightRange(e,A,w,s,r),this.startSpan(Math.min(w,e.to),h),!(e.to>=b||!e.nextSibling())););if(!S||b>i)break;g=S.to+l,g>t&&(this.highlightRange(d.cursor(),Math.max(t,S.from+l),Math.min(i,g),"",p),this.startSpan(Math.min(i,g),h))}O&&e.parent()}else if(e.firstChild()){u&&(s="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,s,r),this.startSpan(Math.min(i,e.to),h)}while(e.nextSibling());e.parent()}}};function wp(n){let e=n.type.prop(ph);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}var $=nt.define,is=$(),Rt=$(),uh=$(Rt),dh=$(Rt),Xt=$(),ns=$(Xt),oo=$(Xt),gt=$(),Ht=$(gt),Ot=$(),mt=$(),ao=$(),Ji=$(ao),ss=$(),y={comment:is,lineComment:$(is),blockComment:$(is),docComment:$(is),name:Rt,variableName:$(Rt),typeName:uh,tagName:$(uh),propertyName:dh,attributeName:$(dh),className:$(Rt),labelName:$(Rt),namespace:$(Rt),macroName:$(Rt),literal:Xt,string:ns,docString:$(ns),character:$(ns),attributeValue:$(ns),number:oo,integer:$(oo),float:$(oo),bool:$(Xt),regexp:$(Xt),escape:$(Xt),color:$(Xt),url:$(Xt),keyword:Ot,self:$(Ot),null:$(Ot),atom:$(Ot),unit:$(Ot),modifier:$(Ot),operatorKeyword:$(Ot),controlKeyword:$(Ot),definitionKeyword:$(Ot),moduleKeyword:$(Ot),operator:mt,derefOperator:$(mt),arithmeticOperator:$(mt),logicOperator:$(mt),bitwiseOperator:$(mt),compareOperator:$(mt),updateOperator:$(mt),definitionOperator:$(mt),typeOperator:$(mt),controlOperator:$(mt),punctuation:ao,separator:$(ao),bracket:Ji,angleBracket:$(Ji),squareBracket:$(Ji),paren:$(Ji),brace:$(Ji),content:gt,heading:Ht,heading1:$(Ht),heading2:$(Ht),heading3:$(Ht),heading4:$(Ht),heading5:$(Ht),heading6:$(Ht),contentSeparator:$(gt),list:$(gt),quote:$(gt),emphasis:$(gt),strong:$(gt),link:$(gt),monospace:$(gt),strikethrough:$(gt),inserted:$(),deleted:$(),changed:$(),invalid:$(),meta:ss,documentMeta:$(ss),annotation:$(ss),processingInstruction:$(ss),definition:nt.defineModifier("definition"),constant:nt.defineModifier("constant"),function:nt.defineModifier("function"),standard:nt.defineModifier("standard"),local:nt.defineModifier("local"),special:nt.defineModifier("special")};for(let n in y){let e=y[n];e instanceof nt&&(e.name=n)}var hx=ho([{tag:y.link,class:"tok-link"},{tag:y.heading,class:"tok-heading"},{tag:y.emphasis,class:"tok-emphasis"},{tag:y.strong,class:"tok-strong"},{tag:y.keyword,class:"tok-keyword"},{tag:y.atom,class:"tok-atom"},{tag:y.bool,class:"tok-bool"},{tag:y.url,class:"tok-url"},{tag:y.labelName,class:"tok-labelName"},{tag:y.inserted,class:"tok-inserted"},{tag:y.deleted,class:"tok-deleted"},{tag:y.literal,class:"tok-literal"},{tag:y.string,class:"tok-string"},{tag:y.number,class:"tok-number"},{tag:[y.regexp,y.escape,y.special(y.string)],class:"tok-string2"},{tag:y.variableName,class:"tok-variableName"},{tag:y.local(y.variableName),class:"tok-variableName tok-local"},{tag:y.definition(y.variableName),class:"tok-variableName tok-definition"},{tag:y.special(y.variableName),class:"tok-variableName2"},{tag:y.definition(y.propertyName),class:"tok-propertyName tok-definition"},{tag:y.typeName,class:"tok-typeName"},{tag:y.namespace,class:"tok-namespace"},{tag:y.className,class:"tok-className"},{tag:y.macroName,class:"tok-macroName"},{tag:y.propertyName,class:"tok-propertyName"},{tag:y.operator,class:"tok-operator"},{tag:y.comment,class:"tok-comment"},{tag:y.meta,class:"tok-meta"},{tag:y.invalid,class:"tok-invalid"},{tag:y.punctuation,class:"tok-punctuation"}]);var kp=316,Qp=317,mh=1,vp=2,$p=3,Pp=4,Tp=318,Cp=320,Zp=321,Ap=5,Mp=6,Rp=0,fo=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],gh=125,Xp=59,uo=47,Lp=42,Ep=43,Dp=45,zp=60,_p=44,Wp=63,Bp=46,Yp=91,Ip=new es({start:!1,shift(n,e){return e==Ap||e==Mp||e==Cp?n:e==Zp},strict:!1}),qp=new Mt((n,e)=>{let{next:t}=n;(t==gh||t==-1||e.context)&&n.acceptToken(Tp)},{contextual:!0,fallback:!0}),Vp=new Mt((n,e)=>{let{next:t}=n,i;fo.indexOf(t)>-1||t==uo&&((i=n.peek(1))==uo||i==Lp)||t!=gh&&t!=Xp&&t!=-1&&!e.context&&n.acceptToken(kp)},{contextual:!0}),jp=new Mt((n,e)=>{n.next==Yp&&!e.context&&n.acceptToken(Qp)},{contextual:!0}),Np=new Mt((n,e)=>{let{next:t}=n;if(t==Ep||t==Dp){if(n.advance(),t==n.next){n.advance();let i=!e.context&&e.canShift(mh);n.acceptToken(i?mh:vp)}}else t==Wp&&n.peek(1)==Bp&&(n.advance(),n.advance(),(n.next<48||n.next>57)&&n.acceptToken($p))},{contextual:!0});function co(n,e){return n>=65&&n<=90||n>=97&&n<=122||n==95||n>=192||!e&&n>=48&&n<=57}var Gp=new Mt((n,e)=>{if(n.next!=zp||!e.dialectEnabled(Rp)||(n.advance(),n.next==uo))return;let t=0;for(;fo.indexOf(n.next)>-1;)n.advance(),t++;if(co(n.next,!0)){for(n.advance(),t++;co(n.next,!1);)n.advance(),t++;for(;fo.indexOf(n.next)>-1;)n.advance(),t++;if(n.next==_p)return;for(let i=0;;i++){if(i==7){if(!co(n.next,!0))return;break}if(n.next!="extends".charCodeAt(i))break;n.advance(),t++}}n.acceptToken(Pp,-t)}),Up=os({"get set async static":y.modifier,"for while do if else switch try catch finally return throw break continue default case defer":y.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":y.operatorKeyword,"let var const using function class extends":y.definitionKeyword,"import export from":y.moduleKeyword,"with debugger new":y.keyword,TemplateString:y.special(y.string),super:y.atom,BooleanLiteral:y.bool,this:y.self,null:y.null,Star:y.modifier,VariableName:y.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":y.function(y.variableName),VariableDefinition:y.definition(y.variableName),Label:y.labelName,PropertyName:y.propertyName,PrivatePropertyName:y.special(y.propertyName),"CallExpression/MemberExpression/PropertyName":y.function(y.propertyName),"FunctionDeclaration/VariableDefinition":y.function(y.definition(y.variableName)),"ClassDeclaration/VariableDefinition":y.definition(y.className),"NewExpression/VariableName":y.className,PropertyDefinition:y.definition(y.propertyName),PrivatePropertyDefinition:y.definition(y.special(y.propertyName)),UpdateOp:y.updateOperator,"LineComment Hashbang":y.lineComment,BlockComment:y.blockComment,Number:y.number,String:y.string,Escape:y.escape,ArithOp:y.arithmeticOperator,LogicOp:y.logicOperator,BitOp:y.bitwiseOperator,CompareOp:y.compareOperator,RegExp:y.regexp,Equals:y.definitionOperator,Arrow:y.function(y.punctuation),": Spread":y.punctuation,"( )":y.paren,"[ ]":y.squareBracket,"{ }":y.brace,"InterpolationStart InterpolationEnd":y.special(y.brace),".":y.derefOperator,", ;":y.separator,"@":y.meta,TypeName:y.typeName,TypeDefinition:y.definition(y.typeName),"type enum interface implements namespace module declare":y.definitionKeyword,"abstract global Privacy readonly override":y.modifier,"is keyof unique infer asserts":y.operatorKeyword,JSXAttributeValue:y.attributeValue,JSXText:y.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":y.angleBracket,"JSXIdentifier JSXNameSpacedName":y.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":y.attributeName,"JSXBuiltin/JSXIdentifier":y.standard(y.tagName)}),Fp={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},Hp={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},Kp={__proto__:null,"<":193},yh=ts.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-E<j-E<jO9kQ`O,5=_O!$rQ`O,5=_O!$wQlO,5;ZO!&zQMhO'#EkO!(eQ`O,5;ZO!(jQlO'#DyO!(tQpO,5;dO!(|QpO,5;dO%[QlO,5;dOOQ['#FT'#FTOOQ['#FV'#FVO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eOOQ['#FZ'#FZO!)[QlO,5;tOOQ!0Lf,5;y,5;yOOQ!0Lf,5;z,5;zOOQ!0Lf,5;|,5;|O%[QlO'#IpO!+_Q!0LrO,5<iO%[QlO,5;eO!&zQMhO,5;eO!+|QMhO,5;eO!-nQMhO'#E^O%[QlO,5;wOOQ!0Lf,5;{,5;{O!-uQ,UO'#FjO!.rQ,UO'#KXO!.^Q,UO'#KXO!.yQ,UO'#KXOOQO'#KX'#KXO!/_Q,UO,5<SOOOW,5<`,5<`O!/pQlO'#FvOOOW'#Io'#IoO7VO7dO,5<QO!/wQ,UO'#FxOOQ!0Lf,5<Q,5<QO!0hQ$IUO'#CyOOQ!0Lh'#C}'#C}O!0{O#@ItO'#DRO!1iQMjO,5<eO!1pQ`O,5<hO!3YQ(CWO'#GXO!3jQ`O'#GYO!3oQ`O'#GYO!5_Q(CWO'#G^O!6dQpO'#GbOOQO'#Gn'#GnO!,TQMhO'#GmOOQO'#Gp'#GpO!,TQMhO'#GoO!7VQ$IUO'#JlOOQ!0Lh'#Jl'#JlO!7aQ`O'#JkO!7oQ`O'#JjO!7wQ`O'#CuOOQ!0Lh'#C{'#C{O!8YQ`O'#C}OOQ!0Lh'#DV'#DVOOQ!0Lh'#DX'#DXO!8_Q`O,5<eO1SQ`O'#DZO!,TQMhO'#GPO!,TQMhO'#GRO!8gQ`O'#GTO!8lQ`O'#GUO!3oQ`O'#G[O!,TQMhO'#GaO<]Q`O'#JkO!8qQ`O'#EqO!9`Q`O,5<gOOQ!0Lb'#Cr'#CrO!9hQ`O'#ErO!:bQpO'#EsOOQ!0Lb'#KR'#KRO!:iQ!0LrO'#KaO9uQ!0LrO,5=cO`QlO,5>tOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!<hQ!0MxO,5:bO!:]QpO,5:`O!?RQ!0MxO,5:jO%[QlO,5:jO!AiQ!0MxO,5:lOOQO,5@z,5@zO!BYQMhO,5=_O!BhQ!0LrO'#JiO9`Q`O'#JiO!ByQ!0LrO,59ZO!CUQpO,59ZO!C^QMhO,59ZO:dQMhO,59ZO!CiQ`O,5;ZO!CqQ`O'#HbO!DVQ`O'#KdO%[QlO,5;}O!:]QpO,5<PO!D_Q`O,5=zO!DdQ`O,5=zO!DiQ`O,5=zO!DwQ`O,5=zO9uQ!0LrO,5=zO<]Q`O,5=jOOQO'#Cy'#CyO!EOQpO,5=gO!EWQMhO,5=hO!EcQ`O,5=jO!EhQ!bO,5=mO!EpQ`O'#K`O?YQ`O'#HWO9kQ`O'#HYO!EuQ`O'#HYO:dQMhO'#H[O!EzQ`O'#H[OOQ[,5=p,5=pO!FPQ`O'#H]O!FbQ`O'#CoO!FgQ`O,59PO!FqQ`O,59PO!HvQlO,59POOQ[,59P,59PO!IWQ!0LrO,59PO%[QlO,59PO!KcQlO'#HeOOQ['#Hf'#HfOOQ['#Hg'#HgO`QlO,5=}O!KyQ`O,5=}O`QlO,5>TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-E<f-E<fO#)kQ!0MSO,5;RODWQpO,5:rO#)uQpO,5:rODWQpO,5;RO!ByQ!0LrO,5:rOOQ!0Lb'#Ej'#EjOOQO,5;R,5;RO%[QlO,5;RO#*SQ!0LrO,5;RO#*_Q!0LrO,5;RO!CUQpO,5:rOOQO,5;X,5;XO#*mQ!0LrO,5;RPOOO'#I^'#I^P#+RO&2DjO,58|POOO,58|,58|OOOO-E<^-E<^OOQ!0Lh1G.p1G.pOOOO-E<_-E<_OOOO,59},59}O#+^Q!bO,59}OOOO-E<a-E<aOOQ!0Lf1G/g1G/gO#+cQ!fO,5?OO+}QlO,5?OOOQO,5?U,5?UO#+mQlO'#IdOOQO-E<b-E<bO#+zQ`O,5@`O#,SQ!fO,5@`O#,ZQ`O,5@nOOQ!0Lf1G/m1G/mO%[QlO,5@oO#,cQ`O'#IjOOQO-E<h-E<hO#,ZQ`O,5@nOOQ!0Lb1G0x1G0xOOQ!0Ln1G/x1G/xOOQ!0Ln1G0Y1G0YO%[QlO,5@lO#,wQ!0LrO,5@lO#-YQ!0LrO,5@lO#-aQ`O,5@kO9eQ`O,5@kO#-iQ`O,5@kO#-wQ`O'#ImO#-aQ`O,5@kOOQ!0Lb1G0w1G0wO!(tQpO,5:uO!)PQpO,5:uOOQS,5:w,5:wO#.iQdO,5:wO#.qQMhO1G2yO9kQ`O1G2yOOQ!0Lf1G0u1G0uO#/PQ!0MxO1G0uO#0UQ!0MvO,5;VOOQ!0Lh'#GW'#GWO#0rQ!0MzO'#JlO!$wQlO1G0uO#2}Q!fO'#JwO%[QlO'#JwO#3XQ`O,5:eOOQ!0Lh'#D_'#D_OOQ!0Lf1G1O1G1OO%[QlO1G1OOOQ!0Lf1G1f1G1fO#3^Q`O1G1OO#5rQ!0MxO1G1PO#5yQ!0MxO1G1PO#8aQ!0MxO1G1PO#8hQ!0MxO1G1PO#;OQ!0MxO1G1PO#=fQ!0MxO1G1PO#=mQ!0MxO1G1PO#=tQ!0MxO1G1PO#@[Q!0MxO1G1PO#@cQ!0MxO1G1PO#BpQ?MtO'#CiO#DkQ?MtO1G1`O#DrQ?MtO'#JsO#EVQ!0MxO,5?[OOQ!0Lb-E<n-E<nO#GdQ!0MxO1G1PO#HaQ!0MzO1G1POOQ!0Lf1G1P1G1PO#IdQMjO'#J|O#InQ`O,5:xO#IsQ!0MxO1G1cO#JgQ,UO,5<WO#JoQ,UO,5<XO#JwQ,UO'#FoO#K`Q`O'#FnOOQO'#KY'#KYOOQO'#In'#InO#KeQ,UO1G1nOOQ!0Lf1G1n1G1nOOOW1G1y1G1yO#KvQ?MtO'#JrO#LQQ`O,5<bO!)[QlO,5<bOOOW-E<m-E<mOOQ!0Lf1G1l1G1lO#LVQpO'#KXOOQ!0Lf,5<d,5<dO#L_QpO,5<dO#LdQMhO'#DTOOOO'#Ib'#IbO#LkO#@ItO,59mOOQ!0Lh,59m,59mO%[QlO1G2PO!8lQ`O'#IrO#LvQ`O,5<zOOQ!0Lh,5<w,5<wO!,TQMhO'#IuO#MdQMjO,5=XO!,TQMhO'#IwO#NVQMjO,5=ZO!&zQMhO,5=]OOQO1G2S1G2SO#NaQ!dO'#CrO#NtQ(CWO'#ErO$ |QpO'#GbO$!dQ!dO,5<sO$!kQ`O'#K[O9eQ`O'#K[O$!yQ`O,5<uO$#aQ!dO'#C{O!,TQMhO,5<tO$#kQ`O'#GZO$$PQ`O,5<tO$$UQ!dO'#GWO$$cQ!dO'#K]O$$mQ`O'#K]O!&zQMhO'#K]O$$rQ`O,5<xO$$wQlO'#JvO$%RQpO'#GcO#$`QpO'#GcO$%dQ`O'#GgO!3oQ`O'#GkO$%iQ!0LrO'#ItO$%tQpO,5<|OOQ!0Lp,5<|,5<|O$%{QpO'#GcO$&YQpO'#GdO$&kQpO'#GdO$&pQMjO,5=XO$'QQMjO,5=ZOOQ!0Lh,5=^,5=^O!,TQMhO,5@VO!,TQMhO,5@VO$'bQ`O'#IyO$'vQ`O,5@UO$(OQ`O,59aOOQ!0Lh,59i,59iO$(TQ`O,5@VO$)TQ$IYO,59uOOQ!0Lh'#Jp'#JpO$)vQMjO,5<kO$*iQMjO,5<mO@zQ`O,5<oOOQ!0Lh,5<p,5<pO$*sQ`O,5<vO$*xQMjO,5<{O$+YQ`O'#KPO!$wQlO1G2RO$+_Q`O1G2RO9eQ`O'#KSO9eQ`O'#EtO%[QlO'#EtO9eQ`O'#I{O$+dQ!0LrO,5@{OOQ[1G2}1G2}OOQ[1G4`1G4`OOQ!0Lf1G/|1G/|OOQ!0Lf1G/z1G/zO$-fQ!0MxO1G0UOOQ[1G2y1G2yO!&zQMhO1G2yO%[QlO1G2yO#.tQ`O1G2yO$/jQMhO'#EkOOQ!0Lb,5@T,5@TO$/wQ!0LrO,5@TOOQ[1G.u1G.uO!ByQ!0LrO1G.uO!CUQpO1G.uO!C^QMhO1G.uO$0YQ`O1G0uO$0_Q`O'#CiO$0jQ`O'#KeO$0rQ`O,5=|O$0wQ`O'#KeO$0|Q`O'#KeO$1[Q`O'#JRO$1jQ`O,5AOO$1rQ!fO1G1iOOQ!0Lf1G1k1G1kO9kQ`O1G3fO@zQ`O1G3fO$1yQ`O1G3fO$2OQ`O1G3fO!DiQ`O1G3fO9uQ!0LrO1G3fOOQ[1G3f1G3fO!EcQ`O1G3UO!&zQMhO1G3RO$2TQ`O1G3ROOQ[1G3S1G3SO!&zQMhO1G3SO$2YQ`O1G3SO$2bQpO'#HQOOQ[1G3U1G3UO!6_QpO'#I}O!EhQ!bO1G3XOOQ[1G3X1G3XOOQ[,5=r,5=rO$2jQMhO,5=tO9kQ`O,5=tO$%dQ`O,5=vO9`Q`O,5=vO!CUQpO,5=vO!C^QMhO,5=vO:dQMhO,5=vO$2xQ`O'#KcO$3TQ`O,5=wOOQ[1G.k1G.kO$3YQ!0LrO1G.kO@zQ`O1G.kO$3eQ`O1G.kO9uQ!0LrO1G.kO$5mQ!fO,5AQO$5zQ`O,5AQO9eQ`O,5AQO$6VQlO,5>PO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5<iO$BOQ!fO1G4jOOQO1G4p1G4pO%[QlO,5?OO$BYQ`O1G5zO$BbQ`O1G6YO$BjQ!fO1G6ZO9eQ`O,5?UO$BtQ!0MxO1G6WO%[QlO1G6WO$CUQ!0LrO1G6WO$CgQ`O1G6VO$CgQ`O1G6VO9eQ`O1G6VO$CoQ`O,5?XO9eQ`O,5?XOOQO,5?X,5?XO$DTQ`O,5?XO$+YQ`O,5?XOOQO-E<k-E<kOOQS1G0a1G0aOOQS1G0c1G0cO#.lQ`O1G0cOOQ[7+(e7+(eO!&zQMhO7+(eO%[QlO7+(eO$DcQ`O7+(eO$DnQMhO7+(eO$D|Q!0MzO,5=XO$GXQ!0MzO,5=ZO$IdQ!0MzO,5=XO$KuQ!0MzO,5=ZO$NWQ!0MzO,59uO%!]Q!0MzO,5<kO%$hQ!0MzO,5<mO%&sQ!0MzO,5<{OOQ!0Lf7+&a7+&aO%)UQ!0MxO7+&aO%)xQlO'#IfO%*VQ`O,5@cO%*_Q!fO,5@cOOQ!0Lf1G0P1G0PO%*iQ`O7+&jOOQ!0Lf7+&j7+&jO%*nQ?MtO,5:fO%[QlO7+&zO%*xQ?MtO,5:bO%+VQ?MtO,5:jO%+aQ?MtO,5:lO%+kQMhO'#IiO%+uQ`O,5@hOOQ!0Lh1G0d1G0dOOQO1G1r1G1rOOQO1G1s1G1sO%+}Q!jO,5<ZO!)[QlO,5<YOOQO-E<l-E<lOOQ!0Lf7+'Y7+'YOOOW7+'e7+'eOOOW1G1|1G1|O%,YQ`O1G1|OOQ!0Lf1G2O1G2OOOOO,59o,59oO%,_Q!dO,59oOOOO-E<`-E<`OOQ!0Lh1G/X1G/XO%,fQ!0MxO7+'kOOQ!0Lh,5?^,5?^O%-YQMhO1G2fP%-aQ`O'#IrPOQ!0Lh-E<p-E<pO%-}QMjO,5?aOOQ!0Lh-E<s-E<sO%.pQMjO,5?cOOQ!0Lh-E<u-E<uO%.zQ!dO1G2wO%/RQ!dO'#CrO%/iQMhO'#KSO$$wQlO'#JvOOQ!0Lh1G2_1G2_O%/sQ`O'#IqO%0[Q`O,5@vO%0[Q`O,5@vO%0dQ`O,5@vO%0oQ`O,5@vOOQO1G2a1G2aO%0}QMjO1G2`O$+YQ`O'#K[O!,TQMhO1G2`O%1_Q(CWO'#IsO%1lQ`O,5@wO!&zQMhO,5@wO%1tQ!dO,5@wOOQ!0Lh1G2d1G2dO%4UQ!fO'#CiO%4`Q`O,5=POOQ!0Lb,5<},5<}O%4hQpO,5<}OOQ!0Lb,5=O,5=OOCwQ`O,5<}O%4sQpO,5<}OOQ!0Lb,5=R,5=RO$+YQ`O,5=VOOQO,5?`,5?`OOQO-E<r-E<rOOQ!0Lp1G2h1G2hO#$`QpO,5<}O$$wQlO,5=PO%5RQ`O,5=OO%5^QpO,5=OO!,TQMhO'#IuO%6WQMjO1G2sO!,TQMhO'#IwO%6yQMjO1G2uO%7TQMjO1G5qO%7_QMjO1G5qOOQO,5?e,5?eOOQO-E<w-E<wOOQO1G.{1G.{O!,TQMhO1G5qO!,TQMhO1G5qO!:]QpO,59wO%[QlO,59wOOQ!0Lh,5<j,5<jO%7lQ`O1G2ZO!,TQMhO1G2bO%7qQ!0MxO7+'mOOQ!0Lf7+'m7+'mO!$wQlO7+'mO%8eQ`O,5;`OOQ!0Lb,5?g,5?gOOQ!0Lb-E<y-E<yO%8jQ!dO'#K^O#(ZQ`O7+(eO4UQ!fO7+(eO$DfQ`O7+(eO%8tQ!0MvO'#CiO%9XQ!0MvO,5=SO%9lQ`O,5=SO%9tQ`O,5=SOOQ!0Lb1G5o1G5oOOQ[7+$a7+$aO!ByQ!0LrO7+$aO!CUQpO7+$aO!$wQlO7+&aO%9yQ`O'#JQO%:bQ`O,5APOOQO1G3h1G3hO9kQ`O,5APO%:bQ`O,5APO%:jQ`O,5APOOQO,5?m,5?mOOQO-E=P-E=POOQ!0Lf7+'T7+'TO%:oQ`O7+)QO9uQ!0LrO7+)QO9kQ`O7+)QO@zQ`O7+)QO%:tQ`O7+)QOOQ[7+)Q7+)QOOQ[7+(p7+(pO%:yQ!0MvO7+(mO!&zQMhO7+(mO!E^Q`O7+(nOOQ[7+(n7+(nO!&zQMhO7+(nO%;TQ`O'#KbO%;`Q`O,5=lOOQO,5?i,5?iOOQO-E<{-E<{OOQ[7+(s7+(sO%<rQpO'#HZOOQ[1G3`1G3`O!&zQMhO1G3`O%[QlO1G3`O%<yQ`O1G3`O%=UQMhO1G3`O9uQ!0LrO1G3bO$%dQ`O1G3bO9`Q`O1G3bO!CUQpO1G3bO!C^QMhO1G3bO%=dQ`O'#JPO%=xQ`O,5@}O%>QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-E<c-E<cOOQO,5?V,5?VOOQO-E<i-E<iO!CUQpO1G/sOOQO-E<e-E<eOOQ!0Ln1G0]1G0]OOQ!0Lf7+%u7+%uO#(ZQ`O7+%uOOQ!0Lf7+&`7+&`O?YQ`O7+&`O!CUQpO7+&`OOQO7+%x7+%xO$AlQ!0MxO7+&XOOQO7+&X7+&XO%[QlO7+&XO%@nQ!0LrO7+&XO!ByQ!0LrO7+%xO!CUQpO7+%xO%@yQ!0LrO7+&XO%AXQ!0MxO7++rO%[QlO7++rO%AiQ`O7++qO%AiQ`O7++qOOQO1G4s1G4sO9eQ`O1G4sO%AqQ`O1G4sOOQS7+%}7+%}O#(ZQ`O<<LPO4UQ!fO<<LPO%BPQ`O<<LPOOQ[<<LP<<LPO!&zQMhO<<LPO%[QlO<<LPO%BXQ`O<<LPO%BdQ!0MzO,5?aO%DoQ!0MzO,5?cO%FzQ!0MzO1G2`O%I]Q!0MzO1G2sO%KhQ!0MzO1G2uO%MsQ!fO,5?QO%[QlO,5?QOOQO-E<d-E<dO%M}Q`O1G5}OOQ!0Lf<<JU<<JUO%NVQ?MtO1G0uO&!^Q?MtO1G1PO&!eQ?MtO1G1PO&$fQ?MtO1G1PO&$mQ?MtO1G1PO&&nQ?MtO1G1PO&(oQ?MtO1G1PO&(vQ?MtO1G1PO&(}Q?MtO1G1PO&+OQ?MtO1G1PO&+VQ?MtO1G1PO&+^Q!0MxO<<JfO&-UQ?MtO1G1PO&.RQ?MvO1G1PO&/UQ?MvO'#JlO&1[Q?MtO1G1cO&1iQ?MtO1G0UO&1sQMjO,5?TOOQO-E<g-E<gO!)[QlO'#FqOOQO'#KZ'#KZOOQO1G1u1G1uO&1}Q`O1G1tO&2SQ?MtO,5?[OOOW7+'h7+'hOOOO1G/Z1G/ZO&2^Q!dO1G4xOOQ!0Lh7+(Q7+(QP!&zQMhO,5?^O!,TQMhO7+(cO&2eQ`O,5?]O9eQ`O,5?]O$+YQ`O,5?]OOQO-E<o-E<oO&2sQ`O1G6bO&2sQ`O1G6bO&2{Q`O1G6bO&3WQMjO7+'zO&3hQ!dO,5?_O&3rQ`O,5?_O!&zQMhO,5?_OOQO-E<q-E<qO&3wQ!dO1G6cO&4RQ`O1G6cO&4ZQ`O1G2kO!&zQMhO1G2kOOQ!0Lb1G2i1G2iOOQ!0Lb1G2j1G2jO%4hQpO1G2iO!CUQpO1G2iOCwQ`O1G2iOOQ!0Lb1G2q1G2qO&4`QpO1G2iO&4nQ`O1G2kO$+YQ`O1G2jOCwQ`O1G2jO$$wQlO1G2kO&4vQ`O1G2jO&5jQMjO,5?aOOQ!0Lh-E<t-E<tO&6]QMjO,5?cOOQ!0Lh-E<v-E<vO!,TQMhO7++]O&6gQMjO7++]O&6qQMjO7++]OOQ!0Lh1G/c1G/cO&7OQ`O1G/cOOQ!0Lh7+'u7+'uO&7TQMjO7+'|O&7eQ!0MxO<<KXOOQ!0Lf<<KX<<KXO&8XQ`O1G0zO!&zQMhO'#IzO&8^Q`O,5@xO&:`Q!fO<<LPO!&zQMhO1G2nO&:gQ!0LrO1G2nOOQ[<<G{<<G{O!ByQ!0LrO<<G{O&:xQ!0MxO<<I{OOQ!0Lf<<I{<<I{OOQO,5?l,5?lO&;lQ`O,5?lO&;qQ`O,5?lOOQO-E=O-E=OO&<PQ`O1G6kO&<PQ`O1G6kO9kQ`O1G6kO@zQ`O<<LlOOQ[<<Ll<<LlO&<XQ`O<<LlO9uQ!0LrO<<LlO9kQ`O<<LlOOQ[<<LX<<LXO%:yQ!0MvO<<LXOOQ[<<LY<<LYO!E^Q`O<<LYO&<^QpO'#I|O&<iQ`O,5@|O!)[QlO,5@|OOQ[1G3W1G3WOOQO'#JO'#JOO9uQ!0LrO'#JOO&<qQpO,5=uOOQ[,5=u,5=uO&<xQpO'#EgO&=PQpO'#GeO&=UQ`O7+(zO&=ZQ`O7+(zOOQ[7+(z7+(zO!&zQMhO7+(zO%[QlO7+(zO&=cQ`O7+(zOOQ[7+(|7+(|O9uQ!0LrO7+(|O$%dQ`O7+(|O9`Q`O7+(|O!CUQpO7+(|O&=nQ`O,5?kOOQO-E<}-E<}OOQO'#H^'#H^O&=yQ`O1G6iO9uQ!0LrO<<GqOOQ[<<Gq<<GqO@zQ`O<<GqO&>RQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<<Ly<<LyOOQ[<<L{<<L{OOQ[-E=Q-E=QOOQ[1G3z1G3zO&>nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<<Ia<<IaOOQ!0Lf<<Iz<<IzO?YQ`O<<IzOOQO<<Is<<IsO$AlQ!0MxO<<IsO%[QlO<<IsOOQO<<Id<<IdO!ByQ!0LrO<<IdO&?SQ!0LrO<<IsO&?_Q!0MxO<= ^O&?oQ`O<= ]OOQO7+*_7+*_O9eQ`O7+*_OOQ[ANAkANAkO&?wQ!fOANAkO!&zQMhOANAkO#(ZQ`OANAkO4UQ!fOANAkO&@OQ`OANAkO%[QlOANAkO&@WQ!0MzO7+'zO&BiQ!0MzO,5?aO&DtQ!0MzO,5?cO&GPQ!0MzO7+'|O&IbQ!fO1G4lO&IlQ?MtO7+&aO&KpQ?MvO,5=XO&MwQ?MvO,5=ZO&NXQ?MvO,5=XO&NiQ?MvO,5=ZO&NyQ?MvO,59uO'#PQ?MvO,5<kO'%SQ?MvO,5<mO''hQ?MvO,5<{O')^Q?MtO7+'kO')kQ?MtO7+'mO')xQ`O,5<]OOQO7+'`7+'`OOQ!0Lh7+*d7+*dO')}QMjO<<K}OOQO1G4w1G4wO'*UQ`O1G4wO'*aQ`O1G4wO'*oQ`O7++|O'*oQ`O7++|O!&zQMhO1G4yO'*wQ!dO1G4yO'+RQ`O7++}O'+ZQ`O7+(VO'+fQ!dO7+(VOOQ!0Lb7+(T7+(TOOQ!0Lb7+(U7+(UO!CUQpO7+(TOCwQ`O7+(TO'+pQ`O7+(VO!&zQMhO7+(VO$+YQ`O7+(UO'+uQ`O7+(VOCwQ`O7+(UO'+}QMjO<<NwO!,TQMhO<<NwOOQ!0Lh7+$}7+$}O',XQ!dO,5?fOOQO-E<x-E<xO',cQ!0MvO7+(YO!&zQMhO7+(YOOQ[AN=gAN=gO9kQ`O1G5WOOQO1G5W1G5WO',sQ`O1G5WO',xQ`O7+,VO',xQ`O7+,VO9uQ!0LrOANBWO@zQ`OANBWOOQ[ANBWANBWO'-QQ`OANBWOOQ[ANAsANAsOOQ[ANAtANAtO'-VQ`O,5?hOOQO-E<z-E<zO'-bQ?MtO1G6hOOQO,5?j,5?jOOQO-E<|-E<|OOQ[1G3a1G3aO'-lQ`O,5=POOQ[<<Lf<<LfO!&zQMhO<<LfO&=UQ`O<<LfO'-qQ`O<<LfO%[QlO<<LfOOQ[<<Lh<<LhO9uQ!0LrO<<LhO$%dQ`O<<LhO9`Q`O<<LhO'-yQpO1G5VO'.UQ`O7+,TOOQ[AN=]AN=]O9uQ!0LrOAN=]OOQ[<= r<= rOOQ[<= s<= sO'.^Q`O<= rO'.cQ`O<= sOOQ[<<Lq<<LqO'.hQ`O<<LqO'.mQlO<<LqOOQ[1G3{1G3{O?YQ`O7+)lO'.tQ`O<<JQO'/PQ?MtO<<JQOOQO<<Hy<<HyOOQ!0LfAN?fAN?fOOQOAN?_AN?_O$AlQ!0MxOAN?_OOQOAN?OAN?OO%[QlOAN?_OOQO<<My<<MyOOQ[G27VG27VO!&zQMhOG27VO#(ZQ`OG27VO'/ZQ!fOG27VO4UQ!fOG27VO'/bQ`OG27VO'/jQ?MtO<<JfO'/wQ?MvO1G2`O'1mQ?MvO,5?aO'3pQ?MvO,5?cO'5sQ?MvO1G2sO'7vQ?MvO1G2uO'9yQ?MtO<<KXO':WQ?MtO<<I{OOQO1G1w1G1wO!,TQMhOANAiOOQO7+*c7+*cO':eQ`O7+*cO':pQ`O<= hO':xQ!dO7+*eOOQ!0Lb<<Kq<<KqO$+YQ`O<<KqOCwQ`O<<KqO';SQ`O<<KqO!&zQMhO<<KqOOQ!0Lb<<Ko<<KoO!CUQpO<<KoO';_Q!dO<<KqOOQ!0Lb<<Kp<<KpO';iQ`O<<KqO!&zQMhO<<KqO$+YQ`O<<KpO';nQMjOANDcO';xQ!0MvO<<KtOOQO7+*r7+*rO9kQ`O7+*rO'<YQ`O<= qOOQ[G27rG27rO9uQ!0LrOG27rO@zQ`OG27rO!)[QlO1G5SO'<bQ`O7+,SO'<jQ`O1G2kO&=UQ`OANBQOOQ[ANBQANBQO!&zQMhOANBQO'<oQ`OANBQOOQ[ANBSANBSO9uQ!0LrOANBSO$%dQ`OANBSOOQO'#H_'#H_OOQO7+*q7+*qOOQ[G22wG22wOOQ[ANE^ANE^OOQ[ANE_ANE_OOQ[ANB]ANB]O'<wQ`OANB]OOQ[<<MW<<MWO!)[QlOAN?lOOQOG24yG24yO$AlQ!0MxOG24yO#(ZQ`OLD,qOOQ[LD,qLD,qO!&zQMhOLD,qO'<|Q!fOLD,qO'=TQ?MvO7+'zO'>yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<<M}<<M}OOQ!0LbANA]ANA]O$+YQ`OANA]OCwQ`OANA]O'EVQ!dOANA]OOQ!0LbANAZANAZO'E^Q`OANA]O!&zQMhOANA]O'EiQ!dOANA]OOQ!0LbANA[ANA[OOQO<<N^<<N^OOQ[LD-^LD-^O9uQ!0LrOLD-^O'EsQ?MtO7+*nOOQO'#Gf'#GfOOQ[G27lG27lO&=UQ`OG27lO!&zQMhOG27lOOQ[G27nG27nO9uQ!0LrOG27nOOQ[G27wG27wO'E}Q?MtOG25WOOQOLD*eLD*eOOQ[!$(!]!$(!]O#(ZQ`O!$(!]O!&zQMhO!$(!]O'FXQ!0MzOG27TOOQ!0LbG26wG26wO$+YQ`OG26wO'HjQ`OG26wOCwQ`OG26wO'HuQ!dOG26wO!&zQMhOG26wOOQ[!$(!x!$(!xOOQ[LD-WLD-WO&=UQ`OLD-WOOQ[LD-YLD-YOOQ[!)9Ew!)9EwO#(ZQ`O!)9EwOOQ!0LbLD,cLD,cO$+YQ`OLD,cOCwQ`OLD,cO'H|Q`OLD,cO'IXQ!dOLD,cOOQ[!$(!r!$(!rOOQ[!.K;c!.K;cO'I`Q?MvOG27TOOQ!0Lb!$( }!$( }O$+YQ`O!$( }OCwQ`O!$( }O'KUQ`O!$( }OOQ!0Lb!)9Ei!)9EiO$+YQ`O!)9EiOCwQ`O!)9EiOOQ!0Lb!.K;T!.K;TO$+YQ`O!.K;TOOQ!0Lb!4/0o!4/0oO!)[QlO'#DzO1PQ`O'#EXO'KaQ!fO'#JrO'KhQ!L^O'#DvO'KoQlO'#EOO'KvQ!fO'#CiO'N^Q!fO'#CiO!)[QlO'#EQO'NnQlO,5;ZO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO'#IpO(!qQ`O,5<iO!)[QlO,5;eO(!yQMhO,5;eO($dQMhO,5;eO!)[QlO,5;wO!&zQMhO'#GmO(!yQMhO'#GmO!&zQMhO'#GoO(!yQMhO'#GoO1SQ`O'#DZO1SQ`O'#DZO!&zQMhO'#GPO(!yQMhO'#GPO!&zQMhO'#GRO(!yQMhO'#GRO!&zQMhO'#GaO(!yQMhO'#GaO!)[QlO,5:jO($kQpO'#D_O($uQpO'#JvO!)[QlO,5@oO'NnQlO1G0uO(%PQ?MtO'#CiO!)[QlO1G2PO!&zQMhO'#IuO(!yQMhO'#IuO!&zQMhO'#IwO(!yQMhO'#IwO(%ZQ!dO'#CrO!&zQMhO,5<tO(!yQMhO,5<tO'NnQlO1G2RO!)[QlO7+&zO!&zQMhO1G2`O(!yQMhO1G2`O!&zQMhO'#IuO(!yQMhO'#IuO!&zQMhO'#IwO(!yQMhO'#IwO!&zQMhO1G2bO(!yQMhO1G2bO'NnQlO7+'mO'NnQlO7+&aO!&zQMhOANAiO(!yQMhOANAiO(%nQ`O'#EoO(%sQ`O'#EoO(%{Q`O'#F]O(&QQ`O'#EyO(&VQ`O'#KTO(&bQ`O'#KRO(&mQ`O,5;ZO(&rQMjO,5<eO(&yQ`O'#GYO('OQ`O'#GYO('TQ`O,5<eO(']Q`O,5<gO('eQ`O,5;ZO('mQ?MtO1G1`O('tQ`O,5<tO('yQ`O,5<tO((OQ`O,5<vO((TQ`O,5<vO((YQ`O1G2RO((_Q`O1G0uO((dQMjO<<K}O((kQMjO<<K}O((rQMhO'#F|O9`Q`O'#F{OAuQ`O'#EnO!)[QlO,5;tO!3oQ`O'#GYO!3oQ`O'#GYO!3oQ`O'#G[O!3oQ`O'#G[O!,TQMhO7+(cO!,TQMhO7+(cO%.zQ!dO1G2wO%.zQ!dO1G2wO!&zQMhO,5=]O!&zQMhO,5=]",stateData:"()x~O'|OS'}OSTOS(ORQ~OPYOQYOSfOY!VOaqOdzOeyOl!POpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!uwO!xxO!|]O$W|O$niO%h}O%j!QO%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO%y!UO&W!WO&^!XO&`!YO&b!ZO&d![O&g!]O&m!^O&s!_O&u!`O&w!aO&y!bO&{!cO(TSO(VTO(YUO(aVO(o[O~OWtO~P`OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oa!wOs!nO!S!oO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!xO#W!pO#X!pO#[!zO#]!zO(U!lO(VTO(YUO(e!mO(o!sO~O(O!{O~OP]XR]X[]Xa]Xj]Xr]X!Q]X!S]X!]]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X'z]X(a]X(r]X(y]X(z]X~O!g%RX~P(qO_!}O(V#PO(W!}O(X#PO~O_#QO(X#PO(Y#PO(Z#QO~Ox#SO!U#TO(b#TO(c#VO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T<ZO(VTO(YUO(aVO(o[O~O![#ZO!]#WO!Y(hP!Y(vP~P+}O!^#cO~P`OPYOQYOSfOd!jOe!iOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(VTO(YUO(aVO(o[O~Op#mO![#iO!|]O#i#lO#j#iO(T<[O!k(sP~P.iO!l#oO(T#nO~O!x#sO!|]O%h#tO~O#k#uO~O!g#vO#k#uO~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!]$_O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~Oa(fX'z(fX'w(fX!k(fX!Y(fX!_(fX%i(fX!g(fX~P1qO#S$dO#`$eO$Q$eOP(gXR(gX[(gXj(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX!_(gX%i(gX~Oa(gX'z(gX'w(gX!Y(gX!k(gXv(gX!g(gX~P4UO#`$eO~O$]$hO$_$gO$f$mO~OSfO!_$nO$i$oO$k$qO~Oh%VOj%dOk%dOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T$sO(VTO(YUO(a$uO(y$}O(z%POg(^P~Ol%[O~P7eO!l%eO~O!S%hO!_%iO(T%gO~O!g%mO~Oa%nO'z%nO~O!Q%rO~P%[O(U!lO~P%[O%n%vO~P%[Oh%VO!l%eO(T%gO(U!lO~Oe%}O!l%eO(T%gO~Oj$RO~O!_&PO(T%gO(U!lO(VTO(YUO`)WP~O!Q&SO!l&RO%j&VO&T&WO~P;SO!
gitextract_5fuyu_57/
├── .clang-format
├── .flake8
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│ ├── actions/
│ │ └── release-archive/
│ │ └── action.yml
│ └── workflows/
│ ├── build.yml
│ ├── build_release.yml
│ ├── build_source_release.yml
│ └── wabt-cifuzz.yml
├── .gitignore
├── .gitmodules
├── .style.yapf
├── CMakeLists.txt
├── Contributing.md
├── LICENSE
├── Makefile
├── README.md
├── SECURITY.md
├── docs/
│ ├── decompiler.md
│ ├── demo/
│ │ ├── custom.css
│ │ ├── index.html
│ │ ├── libwabt.js
│ │ ├── libwabt.wasm
│ │ ├── share.js
│ │ ├── third_party/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── index.js
│ │ │ └── package.json
│ │ ├── third_party.bundle.js
│ │ ├── wasm2wat/
│ │ │ ├── demo.js
│ │ │ ├── examples.js
│ │ │ └── index.html
│ │ └── wat2wasm/
│ │ ├── demo.js
│ │ ├── examples.js
│ │ ├── index.html
│ │ └── worker.js
│ ├── doc/
│ │ ├── spectest-interp.1.html
│ │ ├── wasm-decompile.1.html
│ │ ├── wasm-interp.1.html
│ │ ├── wasm-objdump.1.html
│ │ ├── wasm-stats.1.html
│ │ ├── wasm-strip.1.html
│ │ ├── wasm-validate.1.html
│ │ ├── wasm2c.1.html
│ │ ├── wasm2wat.1.html
│ │ ├── wast2json.1.html
│ │ ├── wat-desugar.1.html
│ │ └── wat2wasm.1.html
│ └── wast2json.md
├── fuzz-in/
│ ├── wasm/
│ │ └── stuff.wasm
│ ├── wast/
│ │ └── basic.txt
│ └── wast.dict
├── fuzzers/
│ ├── read_binary_interp_fuzzer.cc
│ ├── read_binary_ir_fuzzer.cc
│ ├── wasm2wat_fuzzer.cc
│ ├── wasm_objdump_fuzzer.cc
│ └── wat2wasm_fuzzer.cc
├── include/
│ └── wabt/
│ ├── apply-names.h
│ ├── base-types.h
│ ├── binary-reader-ir.h
│ ├── binary-reader-logging.h
│ ├── binary-reader-nop.h
│ ├── binary-reader-objdump.h
│ ├── binary-reader-stats.h
│ ├── binary-reader.h
│ ├── binary-writer-spec.h
│ ├── binary-writer.h
│ ├── binary.h
│ ├── binding-hash.h
│ ├── c-writer.h
│ ├── cast.h
│ ├── color.h
│ ├── common.h
│ ├── decompiler-ast.h
│ ├── decompiler-ls.h
│ ├── decompiler-naming.h
│ ├── decompiler.h
│ ├── error-formatter.h
│ ├── error.h
│ ├── expr-visitor.h
│ ├── feature.def
│ ├── feature.h
│ ├── filenames.h
│ ├── generate-names.h
│ ├── interp/
│ │ ├── binary-reader-interp.h
│ │ ├── interp-inl.h
│ │ ├── interp-math.h
│ │ ├── interp-util.h
│ │ ├── interp-wasi.h
│ │ ├── interp.h
│ │ └── istream.h
│ ├── intrusive-list.h
│ ├── ir-util.h
│ ├── ir.h
│ ├── leb128.h
│ ├── lexer-source-line-finder.h
│ ├── lexer-source.h
│ ├── literal.h
│ ├── opcode-code-table.h
│ ├── opcode.def
│ ├── opcode.h
│ ├── option-parser.h
│ ├── range.h
│ ├── resolve-names.h
│ ├── result.h
│ ├── sha256.h
│ ├── shared-validator.h
│ ├── stream.h
│ ├── string-format.h
│ ├── string-util.h
│ ├── token.def
│ ├── token.h
│ ├── tracing.h
│ ├── type-checker.h
│ ├── type.h
│ ├── utf8.h
│ ├── validator.h
│ ├── wast-lexer.h
│ ├── wast-parser.h
│ └── wat-writer.h
├── man/
│ ├── spectest-interp.1
│ ├── wasm-decompile.1
│ ├── wasm-interp.1
│ ├── wasm-objdump.1
│ ├── wasm-stats.1
│ ├── wasm-strip.1
│ ├── wasm-validate.1
│ ├── wasm2c.1
│ ├── wasm2wat.1
│ ├── wast2json.1
│ ├── wat-desugar.1
│ └── wat2wasm.1
├── scripts/
│ ├── TC-s390x.cmake
│ ├── check_clean.py
│ ├── clang-format-diff.sh
│ ├── coverage.sh
│ ├── example-project/
│ │ ├── CMakeLists.txt
│ │ └── example.cpp
│ ├── fuzz-wasm-objdump.sh
│ ├── fuzz-wasm2wat.sh
│ ├── fuzz-wat2wasm.sh
│ ├── gen-emscripten-exported-json.py
│ ├── gen-wasm2c-templates.cmake
│ ├── generate-html-docs.sh
│ ├── help2man.lua
│ ├── sha256sum.py
│ └── wabt-config.cmake.in
├── src/
│ ├── apply-names.cc
│ ├── binary-reader-ir.cc
│ ├── binary-reader-logging.cc
│ ├── binary-reader-objdump.cc
│ ├── binary-reader-stats.cc
│ ├── binary-reader.cc
│ ├── binary-writer-spec.cc
│ ├── binary-writer.cc
│ ├── binary.cc
│ ├── binding-hash.cc
│ ├── c-writer.cc
│ ├── color.cc
│ ├── common.cc
│ ├── config.cc
│ ├── config.h.in
│ ├── decompiler.cc
│ ├── emscripten-exports.txt
│ ├── emscripten-helpers.cc
│ ├── error-formatter.cc
│ ├── expr-visitor.cc
│ ├── feature.cc
│ ├── filenames.cc
│ ├── generate-names.cc
│ ├── interp/
│ │ ├── binary-reader-interp.cc
│ │ ├── interp-util.cc
│ │ ├── interp-wasi.cc
│ │ ├── interp-wasm-c-api.cc
│ │ ├── interp.cc
│ │ ├── istream.cc
│ │ └── wasi_api.def
│ ├── ir-util.cc
│ ├── ir.cc
│ ├── leb128.cc
│ ├── lexer-keywords.txt
│ ├── lexer-source-line-finder.cc
│ ├── lexer-source.cc
│ ├── literal.cc
│ ├── opcode-code-table.c
│ ├── opcode.cc
│ ├── option-parser.cc
│ ├── prebuilt/
│ │ ├── .clang-format
│ │ ├── lexer-keywords.cc
│ │ ├── wasm2c_atomicops_source_declarations.cc
│ │ ├── wasm2c_header_bottom.cc
│ │ ├── wasm2c_header_top.cc
│ │ ├── wasm2c_simd_source_declarations.cc
│ │ ├── wasm2c_source_declarations.cc
│ │ └── wasm2c_source_includes.cc
│ ├── resolve-names.cc
│ ├── sha256.cc
│ ├── shared-validator.cc
│ ├── stream.cc
│ ├── template/
│ │ ├── wasm2c.bottom.h
│ │ ├── wasm2c.declarations.c
│ │ ├── wasm2c.includes.c
│ │ ├── wasm2c.top.h
│ │ ├── wasm2c_atomicops.declarations.c
│ │ └── wasm2c_simd.declarations.c
│ ├── test-binary-reader.cc
│ ├── test-filenames.cc
│ ├── test-hexfloat.cc
│ ├── test-interp.cc
│ ├── test-intrusive-list.cc
│ ├── test-literal.cc
│ ├── test-option-parser.cc
│ ├── test-utf8.cc
│ ├── test-wast-parser.cc
│ ├── token.cc
│ ├── tools/
│ │ ├── spectest-interp.cc
│ │ ├── wasm-decompile.cc
│ │ ├── wasm-interp.cc
│ │ ├── wasm-objdump.cc
│ │ ├── wasm-stats.cc
│ │ ├── wasm-strip.cc
│ │ ├── wasm-validate.cc
│ │ ├── wasm2c.cc
│ │ ├── wasm2wat-fuzz.cc
│ │ ├── wasm2wat.cc
│ │ ├── wast2json.cc
│ │ ├── wat-desugar.cc
│ │ └── wat2wasm.cc
│ ├── tracing.cc
│ ├── type-checker.cc
│ ├── utf8.cc
│ ├── validator.cc
│ ├── wabt.post.js
│ ├── wast-lexer.cc
│ ├── wast-parser.cc
│ └── wat-writer.cc
├── test/
│ ├── README.md
│ ├── binary/
│ │ ├── annotations-custom-sections.txt
│ │ ├── bad-alignment.txt
│ │ ├── bad-brtable-too-big.txt
│ │ ├── bad-call-indirect-reserved.txt
│ │ ├── bad-callindirect-invalid-sig.txt
│ │ ├── bad-code-metadata-function-count.txt
│ │ ├── bad-code-metadata-function-duplicate.txt
│ │ ├── bad-code-metadata-function-index.txt
│ │ ├── bad-code-metadata-function-out-of-order.txt
│ │ ├── bad-code-metadata-instance-count.txt
│ │ ├── bad-code-metadata-instance-duplicate.txt
│ │ ├── bad-code-metadata-instance-out-of-order.txt
│ │ ├── bad-data-count-mismatch.txt
│ │ ├── bad-data-count-order-after-code.txt
│ │ ├── bad-data-count-order-before-elem.txt
│ │ ├── bad-data-drop-no-data-count.txt
│ │ ├── bad-data-invalid-memidx.txt
│ │ ├── bad-data-size.txt
│ │ ├── bad-data-without-memory.txt
│ │ ├── bad-duplicate-section-around-custom.txt
│ │ ├── bad-duplicate-section.txt
│ │ ├── bad-duplicate-subsection.txt
│ │ ├── bad-elem-flags.txt
│ │ ├── bad-export-func.txt
│ │ ├── bad-export-out-of-range.txt
│ │ ├── bad-extra-end.txt
│ │ ├── bad-func-with-struct-type.txt
│ │ ├── bad-function-body-count.txt
│ │ ├── bad-function-body-size.txt
│ │ ├── bad-function-count-missing-code-section.txt
│ │ ├── bad-function-local-type.txt
│ │ ├── bad-function-names-too-many.txt
│ │ ├── bad-function-param-type.txt
│ │ ├── bad-function-result-type.txt
│ │ ├── bad-function-sig.txt
│ │ ├── bad-import-kind.txt
│ │ ├── bad-import-sig.txt
│ │ ├── bad-init-expr-callindirect.txt
│ │ ├── bad-interp-returncallindirect-invalid-sig.txt
│ │ ├── bad-linking-data-segment-index.txt
│ │ ├── bad-linking-function-index.txt
│ │ ├── bad-linking-global-index.txt
│ │ ├── bad-linking-metadata.txt
│ │ ├── bad-linking-tag-index.txt
│ │ ├── bad-logging-basic.txt
│ │ ├── bad-magic.txt
│ │ ├── bad-memory-grow-reserved.txt
│ │ ├── bad-memory-init-max-size.txt
│ │ ├── bad-memory-init-no-data-count.txt
│ │ ├── bad-memory-init-size.txt
│ │ ├── bad-memory-limits-flag-is64.txt
│ │ ├── bad-memory-limits-flag-leb128.txt
│ │ ├── bad-memory-limits-flag-shared.txt
│ │ ├── bad-memory-limits-flag.txt
│ │ ├── bad-memory-max-size.txt
│ │ ├── bad-memory-size-reserved.txt
│ │ ├── bad-multiple-catch-all.txt
│ │ ├── bad-name-section-invalid-index.txt
│ │ ├── bad-name-section-location.txt
│ │ ├── bad-names-duplicate-locals.txt
│ │ ├── bad-names-duplicates.txt
│ │ ├── bad-names-function-locals-out-of-order.txt
│ │ ├── bad-names-locals-out-of-order.txt
│ │ ├── bad-names-out-of-order.txt
│ │ ├── bad-op-after-end.txt
│ │ ├── bad-opcode-prefix.txt
│ │ ├── bad-opcode.txt
│ │ ├── bad-reference-indicies.txt
│ │ ├── bad-reloc-type.txt
│ │ ├── bad-relocs.txt
│ │ ├── bad-returncall-invalid-func.txt
│ │ ├── bad-returncallindirect-invalid-sig.txt
│ │ ├── bad-returncallindirect-reserved.txt
│ │ ├── bad-section-code-leb128.txt
│ │ ├── bad-section-ends-early.txt
│ │ ├── bad-section-size-zero.txt
│ │ ├── bad-segment-no-memory.txt
│ │ ├── bad-start-func.txt
│ │ ├── bad-subsection-out-of-order.txt
│ │ ├── bad-subsection-size.txt
│ │ ├── bad-subsection-unfinished.txt
│ │ ├── bad-table-limits-flag-is64.txt
│ │ ├── bad-table-limits-flag.txt
│ │ ├── bad-tag-after-global.txt
│ │ ├── bad-tag-before-memory.txt
│ │ ├── bad-too-many-locals.txt
│ │ ├── bad-type-form.txt
│ │ ├── bad-typecheck-fail.txt
│ │ ├── bad-typecheck-missing-drop.txt
│ │ ├── bad-unfinished-section.txt
│ │ ├── bad-version.txt
│ │ ├── basic.txt
│ │ ├── code-metadata-section.txt
│ │ ├── compact-imports.txt
│ │ ├── duplicate-func-names.txt
│ │ ├── duplicate-local-names.txt
│ │ ├── dylink-section.txt
│ │ ├── dylink0-section.txt
│ │ ├── function-local-count-zero.txt
│ │ ├── gen-wasm-parse-error.txt
│ │ ├── ignore-custom-section-error-objdump.txt
│ │ ├── ignore-custom-section-error-wasm2wat.txt
│ │ ├── invalid-name.txt
│ │ ├── linking-section.txt
│ │ ├── missing-code-section-empty-function-section.txt
│ │ ├── missing-function-section-empty-code-section.txt
│ │ ├── names.txt
│ │ ├── no-global-names.txt
│ │ ├── no-names.txt
│ │ ├── relocs.txt
│ │ ├── target-features-section.txt
│ │ ├── unrecognized-layer.txt
│ │ ├── unsupported-component.txt
│ │ └── user-section.txt
│ ├── decompile/
│ │ ├── basic.txt
│ │ ├── code-metadata.txt
│ │ ├── loadstore.txt
│ │ ├── names.txt
│ │ ├── passive-data.txt
│ │ ├── precedence.txt
│ │ └── stack-flush.txt
│ ├── desugar/
│ │ ├── basic.txt
│ │ ├── call_indirect.txt
│ │ ├── implicit-func-type.txt
│ │ ├── locals.txt
│ │ └── try.txt
│ ├── dump/
│ │ ├── array.txt
│ │ ├── atomic.txt
│ │ ├── bad-directory.txt
│ │ ├── bad-version-logging.txt
│ │ ├── bad-version.txt
│ │ ├── basic.txt
│ │ ├── basic_dump_only.txt
│ │ ├── binary.txt
│ │ ├── block-257-exprs-br.txt
│ │ ├── block-257-exprs.txt
│ │ ├── block-multi.txt
│ │ ├── block.txt
│ │ ├── br-block-named.txt
│ │ ├── br-block.txt
│ │ ├── br-loop-inner-expr.txt
│ │ ├── br-loop-inner.txt
│ │ ├── br-loop.txt
│ │ ├── brif-loop.txt
│ │ ├── brif.txt
│ │ ├── brtable-empty.txt
│ │ ├── brtable.txt
│ │ ├── bulk-memory.txt
│ │ ├── bulk-memory64.txt
│ │ ├── call.txt
│ │ ├── call_ref.txt
│ │ ├── callimport.txt
│ │ ├── callindirect.txt
│ │ ├── cast.txt
│ │ ├── code-metadata.txt
│ │ ├── compact-imports.txt
│ │ ├── compare.txt
│ │ ├── const.txt
│ │ ├── convert-sat.txt
│ │ ├── convert.txt
│ │ ├── data-count-section-removed.txt
│ │ ├── data-count-section.txt
│ │ ├── debug-import-names.txt
│ │ ├── debug-names.txt
│ │ ├── dedupe-sig.txt
│ │ ├── drop.txt
│ │ ├── elem-mvp-compat-named.txt
│ │ ├── elem-mvp-compat.txt
│ │ ├── export-multi.txt
│ │ ├── expr-br.txt
│ │ ├── expr-brif.txt
│ │ ├── extended-const.txt
│ │ ├── extended-names.txt
│ │ ├── func-exported.txt
│ │ ├── func-multi.txt
│ │ ├── func-named.txt
│ │ ├── func-result-multi.txt
│ │ ├── global.txt
│ │ ├── globalget.txt
│ │ ├── globalset.txt
│ │ ├── hexfloat_f32.txt
│ │ ├── hexfloat_f64.txt
│ │ ├── if-multi.txt
│ │ ├── if-then-else-list.txt
│ │ ├── if-then-list.txt
│ │ ├── if.txt
│ │ ├── import.txt
│ │ ├── invalid-data-segment-no-memory.txt
│ │ ├── invalid-data-segment-offset.txt
│ │ ├── invalid-elem-segment-no-table.txt
│ │ ├── invalid-elem-segment-offset.txt
│ │ ├── invalid-init-exprs.txt
│ │ ├── load-aligned.txt
│ │ ├── load.txt
│ │ ├── load64.txt
│ │ ├── local-indices.txt
│ │ ├── local-tee.txt
│ │ ├── localget-param.txt
│ │ ├── localget.txt
│ │ ├── locals.txt
│ │ ├── localset-param.txt
│ │ ├── localset.txt
│ │ ├── loop-257-exprs-br.txt
│ │ ├── loop-257-exprs.txt
│ │ ├── loop-multi.txt
│ │ ├── loop.txt
│ │ ├── memory-1-byte.txt
│ │ ├── memory-data-size.txt
│ │ ├── memory-grow.txt
│ │ ├── memory-hex.txt
│ │ ├── memory-size.txt
│ │ ├── memory.txt
│ │ ├── memory64.txt
│ │ ├── module-name.txt
│ │ ├── multi_file.txt
│ │ ├── mutable-global.txt
│ │ ├── no-canonicalize.txt
│ │ ├── nocheck.txt
│ │ ├── noncanon-leb128-opcode.txt
│ │ ├── nop.txt
│ │ ├── param-multi.txt
│ │ ├── reference-types.txt
│ │ ├── relocations-all-features.txt
│ │ ├── relocations-block-types.txt
│ │ ├── relocations-long-func-bodies.txt
│ │ ├── relocations-long-func-section.txt
│ │ ├── relocations-section-target.txt
│ │ ├── relocations.txt
│ │ ├── result.txt
│ │ ├── rethrow.txt
│ │ ├── return.txt
│ │ ├── section-offsets.txt
│ │ ├── select.txt
│ │ ├── signatures.txt
│ │ ├── simd-basic.txt
│ │ ├── simd-binary.txt
│ │ ├── simd-bitselect.txt
│ │ ├── simd-compare.txt
│ │ ├── simd-lane.txt
│ │ ├── simd-load-lane.txt
│ │ ├── simd-load-store.txt
│ │ ├── simd-shift.txt
│ │ ├── simd-splat.txt
│ │ ├── simd-store-lane.txt
│ │ ├── simd-unary.txt
│ │ ├── start.txt
│ │ ├── store-aligned.txt
│ │ ├── store.txt
│ │ ├── store64.txt
│ │ ├── string-escape.txt
│ │ ├── string-hex.txt
│ │ ├── struct.txt
│ │ ├── symbol-tables-all-features.txt
│ │ ├── symbol-tables.txt
│ │ ├── table-multi.txt
│ │ ├── table.txt
│ │ ├── tag.txt
│ │ ├── tail-call.txt
│ │ ├── throw.txt
│ │ ├── try-catch-all.txt
│ │ ├── try-delegate.txt
│ │ ├── try-multi.txt
│ │ ├── try.txt
│ │ ├── typed-func-ref-signature.txt
│ │ ├── typed-func-refs-locals.txt
│ │ ├── typed_func_refs_params.txt
│ │ ├── typed_func_refs_results.txt
│ │ ├── unary-extend.txt
│ │ ├── unary.txt
│ │ └── unreachable.txt
│ ├── find_exe.py
│ ├── gen-spec-empty-prefix.js
│ ├── gen-spec-js/
│ │ ├── action.txt
│ │ ├── assert_exhaustion.txt
│ │ ├── assert_malformed-quote.txt
│ │ ├── assert_malformed.txt
│ │ ├── assert_return.txt
│ │ ├── assert_return_nan.txt
│ │ ├── assert_trap.txt
│ │ ├── assert_uninstantiable.txt
│ │ ├── assert_unlinkable.txt
│ │ ├── basic.txt
│ │ ├── many-modules.txt
│ │ └── register.txt
│ ├── gen-spec-js.py
│ ├── gen-spec-prefix.js
│ ├── gen-spec-wast.py
│ ├── gen-wasm.py
│ ├── harness/
│ │ └── wasm2c/
│ │ ├── floating_point.txt
│ │ ├── simd_formatting.txt
│ │ ├── stdin_file.txt
│ │ └── stdin_file.wast
│ ├── help/
│ │ ├── spectest-interp.txt
│ │ ├── wasm-interp.txt
│ │ ├── wasm-objdump.txt
│ │ ├── wasm-stats.txt
│ │ ├── wasm-validate.txt
│ │ ├── wasm2wat.txt
│ │ ├── wast2json.txt
│ │ ├── wat-desugar.txt
│ │ └── wat2wasm.txt
│ ├── interp/
│ │ ├── atomic-load.txt
│ │ ├── atomic-rmw-add.txt
│ │ ├── atomic-rmw-and.txt
│ │ ├── atomic-rmw-cmpxchg.txt
│ │ ├── atomic-rmw-or.txt
│ │ ├── atomic-rmw-sub.txt
│ │ ├── atomic-rmw-xchg.txt
│ │ ├── atomic-rmw-xor.txt
│ │ ├── atomic-store.txt
│ │ ├── basic-logging.txt
│ │ ├── basic-tracing.txt
│ │ ├── basic.txt
│ │ ├── binary.txt
│ │ ├── block-multi.txt
│ │ ├── br.txt
│ │ ├── brif-loop.txt
│ │ ├── brif.txt
│ │ ├── brtable.txt
│ │ ├── call-dummy-import.txt
│ │ ├── call-multi-result.txt
│ │ ├── call-zero-args.txt
│ │ ├── call.txt
│ │ ├── callimport-zero-args.txt
│ │ ├── callindirect.txt
│ │ ├── cast.txt
│ │ ├── compare.txt
│ │ ├── convert-sat.txt
│ │ ├── convert.txt
│ │ ├── custom-page-sizes.txt
│ │ ├── empty.txt
│ │ ├── expr-block.txt
│ │ ├── expr-br.txt
│ │ ├── expr-brif.txt
│ │ ├── expr-if.txt
│ │ ├── if-multi.txt
│ │ ├── if.txt
│ │ ├── import.txt
│ │ ├── load.txt
│ │ ├── load64.txt
│ │ ├── loop-multi.txt
│ │ ├── loop.txt
│ │ ├── memory-empty-segment.txt
│ │ ├── nested-if.txt
│ │ ├── reference-types.txt
│ │ ├── rethrow-and-br.txt
│ │ ├── rethrow.txt
│ │ ├── return-call-import.txt
│ │ ├── return-call-indirect-import.txt
│ │ ├── return-call-indirect.txt
│ │ ├── return-call-local-set.txt
│ │ ├── return-call.txt
│ │ ├── return-void.txt
│ │ ├── return.txt
│ │ ├── run-export-as-global.txt
│ │ ├── run-export-with-argument.txt
│ │ ├── run-export-with-invalid-arguments-size.txt
│ │ ├── run-non-func-export.txt
│ │ ├── select-ref.txt
│ │ ├── select.txt
│ │ ├── simd-basic.txt
│ │ ├── simd-binary.txt
│ │ ├── simd-bitselect.txt
│ │ ├── simd-compare.txt
│ │ ├── simd-lane.txt
│ │ ├── simd-load-store.txt
│ │ ├── simd-shift.txt
│ │ ├── simd-splat.txt
│ │ ├── simd-unary.txt
│ │ ├── start-failure.txt
│ │ ├── start.txt
│ │ ├── store.txt
│ │ ├── store64.txt
│ │ ├── throw-across-frame.txt
│ │ ├── trap-with-callstack.txt
│ │ ├── try-delegate.txt
│ │ ├── try.txt
│ │ ├── unary-extend.txt
│ │ ├── unary.txt
│ │ └── unreachable.txt
│ ├── old-spec/
│ │ └── proposals/
│ │ └── memory64/
│ │ ├── address.wast
│ │ ├── address64.wast
│ │ ├── align64.wast
│ │ ├── binary-leb128.wast
│ │ ├── binary.wast
│ │ ├── binary0.wast
│ │ ├── call_indirect.wast
│ │ ├── endianness64.wast
│ │ ├── float_memory64.wast
│ │ ├── imports.wast
│ │ ├── load64.wast
│ │ ├── memory.wast
│ │ ├── memory64.wast
│ │ ├── memory_copy.wast
│ │ ├── memory_fill.wast
│ │ ├── memory_grow64.wast
│ │ ├── memory_init.wast
│ │ ├── memory_redundancy64.wast
│ │ ├── memory_trap64.wast
│ │ ├── simd_address.wast
│ │ ├── table.wast
│ │ ├── table_copy.wast
│ │ ├── table_copy_mixed.wast
│ │ ├── table_fill.wast
│ │ ├── table_get.wast
│ │ ├── table_grow.wast
│ │ ├── table_init.wast
│ │ ├── table_set.wast
│ │ └── table_size.wast
│ ├── parse/
│ │ ├── all-features.txt
│ │ ├── annotations.txt
│ │ ├── assert/
│ │ │ ├── assert-after-module.txt
│ │ │ ├── assert-return-arithmetic-nan.txt
│ │ │ ├── assert-return-canonical-nan.txt
│ │ │ ├── assertexception.txt
│ │ │ ├── assertinvalid-binary-module.txt
│ │ │ ├── assertinvalid.txt
│ │ │ ├── assertmalformed.txt
│ │ │ ├── assertreturn.txt
│ │ │ ├── bad-assert-before-module.txt
│ │ │ ├── bad-assertexception.txt
│ │ │ ├── bad-assertreturn-non-const.txt
│ │ │ ├── bad-assertreturn-too-few.txt
│ │ │ ├── bad-assertreturn-too-many.txt
│ │ │ ├── bad-assertreturn-unknown-function.txt
│ │ │ ├── bad-invoke-no-module.txt
│ │ │ ├── bad-invoke-too-few.txt
│ │ │ ├── bad-invoke-too-many.txt
│ │ │ ├── bad-invoke-unknown-function.txt
│ │ │ └── invoke.txt
│ │ ├── bad-annotations.txt
│ │ ├── bad-call-ref.txt
│ │ ├── bad-crlf.txt
│ │ ├── bad-delegate-label.txt
│ │ ├── bad-error-long-line.txt
│ │ ├── bad-error-long-token.txt
│ │ ├── bad-identifiers-with-annotations.txt
│ │ ├── bad-identifiers.txt
│ │ ├── bad-input-command.txt
│ │ ├── bad-output-command.txt
│ │ ├── bad-references.txt
│ │ ├── bad-refs-in-trytable.txt
│ │ ├── bad-single-semicolon.txt
│ │ ├── bad-string-eof.txt
│ │ ├── bad-string-escape.txt
│ │ ├── bad-string-hex-escape.txt
│ │ ├── bad-string-unicode-escape-large.txt
│ │ ├── bad-string-unicode-escape-short.txt
│ │ ├── bad-string-unicode-escape-unallowed.txt
│ │ ├── bad-string-unicode-escape-unexpected.txt
│ │ ├── bad-string-unicode-escape-unterminated.txt
│ │ ├── bad-string-unicode-escape.txt
│ │ ├── bad-toplevel.txt
│ │ ├── basic.txt
│ │ ├── branch-hints.txt
│ │ ├── custom-sections.txt
│ │ ├── empty-file.txt
│ │ ├── export-mutable-global.txt
│ │ ├── expr/
│ │ │ ├── atomic-align.txt
│ │ │ ├── atomic-disabled.txt
│ │ │ ├── atomic.txt
│ │ │ ├── atomic64.txt
│ │ │ ├── bad-atomic-unnatural-align.txt
│ │ │ ├── bad-binary-one-expr.txt
│ │ │ ├── bad-block-end-label.txt
│ │ │ ├── bad-block-mismatch-label.txt
│ │ │ ├── bad-br-bad-depth.txt
│ │ │ ├── bad-br-defined-later.txt
│ │ │ ├── bad-br-name-undefined.txt
│ │ │ ├── bad-br-name.txt
│ │ │ ├── bad-br-no-depth.txt
│ │ │ ├── bad-br-undefined.txt
│ │ │ ├── bad-brtable-bad-depth.txt
│ │ │ ├── bad-brtable-no-vars.txt
│ │ │ ├── bad-compare-one-expr.txt
│ │ │ ├── bad-const-f32-nan-arith.txt
│ │ │ ├── bad-const-f32-trailing.txt
│ │ │ ├── bad-const-f64-nan-arith.txt
│ │ │ ├── bad-const-i32-garbage.txt
│ │ │ ├── bad-const-i32-just-negative-sign.txt
│ │ │ ├── bad-const-i32-overflow.txt
│ │ │ ├── bad-const-i32-trailing.txt
│ │ │ ├── bad-const-i32-underflow.txt
│ │ │ ├── bad-const-i64-overflow.txt
│ │ │ ├── bad-const-type-i32-in-non-simd-const.txt
│ │ │ ├── bad-const-v128-i16x8-overflow.txt
│ │ │ ├── bad-const-v128-i32x4-overflow.txt
│ │ │ ├── bad-const-v128-i8x16-overflow.txt
│ │ │ ├── bad-const-v128-nat-overflow.txt
│ │ │ ├── bad-const-v128-type-i32-expected.txt
│ │ │ ├── bad-convert-float-sign.txt
│ │ │ ├── bad-convert-int-no-sign.txt
│ │ │ ├── bad-globalget-name-undefined.txt
│ │ │ ├── bad-globalget-undefined.txt
│ │ │ ├── bad-globalset-name-undefined.txt
│ │ │ ├── bad-globalset-undefined.txt
│ │ │ ├── bad-if-end-label.txt
│ │ │ ├── bad-if-mismatch-label.txt
│ │ │ ├── bad-if-no-then.txt
│ │ │ ├── bad-load-align-misspelled.txt
│ │ │ ├── bad-load-align-negative.txt
│ │ │ ├── bad-load-align-not-pot.txt
│ │ │ ├── bad-load-align.txt
│ │ │ ├── bad-load-float-sign.txt
│ │ │ ├── bad-load-offset-negative.txt
│ │ │ ├── bad-load-type.txt
│ │ │ ├── bad-localget-name-undefined.txt
│ │ │ ├── bad-localget-name.txt
│ │ │ ├── bad-localget-undefined.txt
│ │ │ ├── bad-localset-name-undefined.txt
│ │ │ ├── bad-localset-name.txt
│ │ │ ├── bad-localset-no-value.txt
│ │ │ ├── bad-localset-undefined.txt
│ │ │ ├── bad-loop-end-label.txt
│ │ │ ├── bad-loop-mismatch-label.txt
│ │ │ ├── bad-memory-copy-differing-type.txt
│ │ │ ├── bad-nop.txt
│ │ │ ├── bad-select-multi.txt
│ │ │ ├── bad-simd-shuffle-lane-index-overflow.txt
│ │ │ ├── bad-simd-shuffle-lane-index-overflow2.txt
│ │ │ ├── bad-simd-shuffle-nat-expected.txt
│ │ │ ├── bad-simd-shuffle-not-enough-indices.txt
│ │ │ ├── bad-store-align-not-pot.txt
│ │ │ ├── bad-store-align.txt
│ │ │ ├── bad-store-float.sign.txt
│ │ │ ├── bad-store-offset-negative.txt
│ │ │ ├── bad-store-type.txt
│ │ │ ├── bad-try-clause.txt
│ │ │ ├── bad-try-delegate.txt
│ │ │ ├── bad-try-multiple-catch.txt
│ │ │ ├── bad-unexpected.txt
│ │ │ ├── binary.txt
│ │ │ ├── block-multi-named.txt
│ │ │ ├── block-multi.txt
│ │ │ ├── block-named.txt
│ │ │ ├── block-return.txt
│ │ │ ├── block.txt
│ │ │ ├── br-block.txt
│ │ │ ├── br-loop.txt
│ │ │ ├── br-named.txt
│ │ │ ├── br.txt
│ │ │ ├── brif-named.txt
│ │ │ ├── brif.txt
│ │ │ ├── brtable-multi.txt
│ │ │ ├── brtable-named.txt
│ │ │ ├── brtable.txt
│ │ │ ├── bulk-memory-disabled.txt
│ │ │ ├── bulk-memory-named.txt
│ │ │ ├── bulk-memory-named64.txt
│ │ │ ├── call-defined-later.txt
│ │ │ ├── call-name-prefix.txt
│ │ │ ├── call-named.txt
│ │ │ ├── call.txt
│ │ │ ├── callimport-defined-later.txt
│ │ │ ├── callimport-named.txt
│ │ │ ├── callimport-type.txt
│ │ │ ├── callimport.txt
│ │ │ ├── callindirect-named.txt
│ │ │ ├── callindirect.txt
│ │ │ ├── callref-imported-function.txt
│ │ │ ├── callref-internal-function.txt
│ │ │ ├── cast.txt
│ │ │ ├── compare.txt
│ │ │ ├── const.txt
│ │ │ ├── convert-sat.txt
│ │ │ ├── convert.txt
│ │ │ ├── drop.txt
│ │ │ ├── expr-br.txt
│ │ │ ├── expr-brif.txt
│ │ │ ├── globalget-named.txt
│ │ │ ├── globalget.txt
│ │ │ ├── globalset-named.txt
│ │ │ ├── globalset.txt
│ │ │ ├── if-multi-named.txt
│ │ │ ├── if-multi.txt
│ │ │ ├── if-return.txt
│ │ │ ├── if-then-br-named.txt
│ │ │ ├── if-then-br.txt
│ │ │ ├── if-then-else-br-named.txt
│ │ │ ├── if-then-else-br.txt
│ │ │ ├── if-then-else-list.txt
│ │ │ ├── if-then-else.txt
│ │ │ ├── if.txt
│ │ │ ├── load-aligned.txt
│ │ │ ├── load-offset.txt
│ │ │ ├── load.txt
│ │ │ ├── load64.txt
│ │ │ ├── local-tee.txt
│ │ │ ├── localget-index-after-param.txt
│ │ │ ├── localget-index-mixed-named-unnamed.txt
│ │ │ ├── localget-named.txt
│ │ │ ├── localget-param-named.txt
│ │ │ ├── localget-param.txt
│ │ │ ├── localget.txt
│ │ │ ├── localset-index-after-param.txt
│ │ │ ├── localset-index-mixed-named-unnamed.txt
│ │ │ ├── localset-named.txt
│ │ │ ├── localset-param-named.txt
│ │ │ ├── localset-param.txt
│ │ │ ├── localset.txt
│ │ │ ├── loop-multi-named.txt
│ │ │ ├── loop-multi.txt
│ │ │ ├── loop-named.txt
│ │ │ ├── loop.txt
│ │ │ ├── memory-copy-differing-type.txt
│ │ │ ├── memory-copy.txt
│ │ │ ├── memory-copy64.txt
│ │ │ ├── memory-drop.txt
│ │ │ ├── memory-fill.txt
│ │ │ ├── memory-fill64.txt
│ │ │ ├── memory-grow.txt
│ │ │ ├── memory-grow64.txt
│ │ │ ├── memory-init.txt
│ │ │ ├── memory-init64.txt
│ │ │ ├── memory-size.txt
│ │ │ ├── nop.txt
│ │ │ ├── reference-types-call-indirect.txt
│ │ │ ├── reference-types-named.txt
│ │ │ ├── reference-types.txt
│ │ │ ├── rethrow.txt
│ │ │ ├── return-block.txt
│ │ │ ├── return-if.txt
│ │ │ ├── return-void.txt
│ │ │ ├── return.txt
│ │ │ ├── select.txt
│ │ │ ├── simd.txt
│ │ │ ├── store-aligned.txt
│ │ │ ├── store-offset.txt
│ │ │ ├── store.txt
│ │ │ ├── store64.txt
│ │ │ ├── table-copy.txt
│ │ │ ├── table-drop.txt
│ │ │ ├── table-get.txt
│ │ │ ├── table-grow.txt
│ │ │ ├── table-init.txt
│ │ │ ├── table-set.txt
│ │ │ ├── tail-call-disabled.txt
│ │ │ ├── tail-call-named.txt
│ │ │ ├── tail-call.txt
│ │ │ ├── throw.txt
│ │ │ ├── try-catch-all.txt
│ │ │ ├── try-delegate.txt
│ │ │ ├── try-multi.txt
│ │ │ ├── try-table.txt
│ │ │ ├── try.txt
│ │ │ ├── unary-extend.txt
│ │ │ ├── unary.txt
│ │ │ └── unreachable.txt
│ │ ├── force-color.txt
│ │ ├── func/
│ │ │ ├── bad-func-name.txt
│ │ │ ├── bad-local-binding-no-type.txt
│ │ │ ├── bad-local-binding.txt
│ │ │ ├── bad-local-name.txt
│ │ │ ├── bad-local-redefinition.txt
│ │ │ ├── bad-local-type-list.txt
│ │ │ ├── bad-local-type.txt
│ │ │ ├── bad-param-binding.txt
│ │ │ ├── bad-param-name.txt
│ │ │ ├── bad-param-redefinition.txt
│ │ │ ├── bad-param-type-list.txt
│ │ │ ├── bad-param.txt
│ │ │ ├── bad-result-type.txt
│ │ │ ├── bad-sig-param-type-mismatch.txt
│ │ │ ├── bad-sig-params-empty.txt
│ │ │ ├── bad-sig-result-type-mismatch.txt
│ │ │ ├── bad-sig-result-type-not-void.txt
│ │ │ ├── bad-sig-result-type-void.txt
│ │ │ ├── bad-sig-too-few-params.txt
│ │ │ ├── bad-sig-too-many-params.txt
│ │ │ ├── func-named.txt
│ │ │ ├── local-empty.txt
│ │ │ ├── local-multi.txt
│ │ │ ├── local.txt
│ │ │ ├── no-space.txt
│ │ │ ├── param-binding.txt
│ │ │ ├── param-multi.txt
│ │ │ ├── param-type-1.txt
│ │ │ ├── param-type-2.txt
│ │ │ ├── result-empty.txt
│ │ │ ├── result-multi.txt
│ │ │ ├── result.txt
│ │ │ ├── sig-match.txt
│ │ │ └── sig.txt
│ │ ├── identifiers-with-annotations.txt
│ │ ├── line-comment.txt
│ │ ├── module/
│ │ │ ├── array-mut-field.txt
│ │ │ ├── array.txt
│ │ │ ├── bad-array-no-fields.txt
│ │ │ ├── bad-array-too-many-fields.txt
│ │ │ ├── bad-binary-module-magic.txt
│ │ │ ├── bad-elem-redefinition.txt
│ │ │ ├── bad-element-followed-by-illegal-expression.txt
│ │ │ ├── bad-export-func-empty.txt
│ │ │ ├── bad-export-func-name-undefined.txt
│ │ │ ├── bad-export-func-name.txt
│ │ │ ├── bad-export-func-no-string.txt
│ │ │ ├── bad-export-func-too-many.txt
│ │ │ ├── bad-export-func-undefined.txt
│ │ │ ├── bad-export-global-name-undefined.txt
│ │ │ ├── bad-export-global-undefined.txt
│ │ │ ├── bad-export-memory-name-undefined.txt
│ │ │ ├── bad-export-memory-undefined.txt
│ │ │ ├── bad-export-table-name-undefined.txt
│ │ │ ├── bad-export-table-undefined.txt
│ │ │ ├── bad-func-redefinition.txt
│ │ │ ├── bad-global-invalid-expr.txt
│ │ │ ├── bad-global-invalid-globalget.txt
│ │ │ ├── bad-import-func-not-param.txt
│ │ │ ├── bad-import-func-not-result.txt
│ │ │ ├── bad-import-func-one-string.txt
│ │ │ ├── bad-import-func-redefinition.txt
│ │ │ ├── bad-import-global-redefinition.txt
│ │ │ ├── bad-import-memory-redefinition.txt
│ │ │ ├── bad-import-table-redefinition.txt
│ │ │ ├── bad-import-table-shared.txt
│ │ │ ├── bad-memory-empty.txt
│ │ │ ├── bad-memory-init-size-negative.txt
│ │ │ ├── bad-memory-init-size-too-big.txt
│ │ │ ├── bad-memory-init-size.txt
│ │ │ ├── bad-memory-max-less-than-init.txt
│ │ │ ├── bad-memory-max-size-negative.txt
│ │ │ ├── bad-memory-max-size-too-big.txt
│ │ │ ├── bad-memory-max-size.txt
│ │ │ ├── bad-memory-segment-address.txt
│ │ │ ├── bad-memory-shared-nomax.txt
│ │ │ ├── bad-memory-too-many.txt
│ │ │ ├── bad-module-multi.txt
│ │ │ ├── bad-module-no-close.txt
│ │ │ ├── bad-module-with-assert.txt
│ │ │ ├── bad-start-not-nullary.txt
│ │ │ ├── bad-start-not-void.txt
│ │ │ ├── bad-start-too-many.txt
│ │ │ ├── bad-table-elem.txt
│ │ │ ├── bad-table-invalid-function.txt
│ │ │ ├── bad-table-no-offset.txt
│ │ │ ├── bad-table-too-many.txt
│ │ │ ├── binary-module.txt
│ │ │ ├── data-offset.txt
│ │ │ ├── elem-offset.txt
│ │ │ ├── export-func-multi.txt
│ │ │ ├── export-func-named.txt
│ │ │ ├── export-func.txt
│ │ │ ├── export-global.txt
│ │ │ ├── export-memory-multi.txt
│ │ │ ├── export-memory.txt
│ │ │ ├── export-table.txt
│ │ │ ├── export-tag.txt
│ │ │ ├── global.txt
│ │ │ ├── import-func-no-param.txt
│ │ │ ├── import-func-type.txt
│ │ │ ├── import-func.txt
│ │ │ ├── import-global-globalget.txt
│ │ │ ├── import-global.txt
│ │ │ ├── import-memory-shared.txt
│ │ │ ├── import-memory.txt
│ │ │ ├── import-mutable-global.txt
│ │ │ ├── import-table.txt
│ │ │ ├── import-tag.txt
│ │ │ ├── memory-init-max-size.txt
│ │ │ ├── memory-init-size.txt
│ │ │ ├── memory-segment-1.txt
│ │ │ ├── memory-segment-long.txt
│ │ │ ├── memory-segment-many.txt
│ │ │ ├── memory-segment-multi-string.txt
│ │ │ ├── memory-segment-passive.txt
│ │ │ ├── memory-shared.txt
│ │ │ ├── module-empty.txt
│ │ │ ├── reference-types-disabled.txt
│ │ │ ├── start-named.txt
│ │ │ ├── start.txt
│ │ │ ├── struct-and-func.txt
│ │ │ ├── struct-field-name.txt
│ │ │ ├── struct-mut-field.txt
│ │ │ ├── struct.txt
│ │ │ ├── table-elem-expr.txt
│ │ │ ├── table-elem-var.txt
│ │ │ ├── table-named.txt
│ │ │ ├── table.txt
│ │ │ ├── tag.txt
│ │ │ ├── type-empty-param.txt
│ │ │ ├── type-empty.txt
│ │ │ ├── type-multi-param.txt
│ │ │ ├── type-no-param.txt
│ │ │ └── type.txt
│ │ ├── nested-comments.txt
│ │ ├── stdin.txt
│ │ ├── string-escape.txt
│ │ └── string-hex.txt
│ ├── pipes.txt
│ ├── regress/
│ │ ├── bad-annotation.txt
│ │ ├── bad-annotation2.txt
│ │ ├── bad-missing-end.txt
│ │ ├── bad-u64-leb128.txt
│ │ ├── empty-quoted-module.txt
│ │ ├── huge-offset.txt
│ │ ├── interp-ehv3-locals.txt
│ │ ├── interp-throw-before-try.txt
│ │ ├── issue-2423-wasm2c-no-extension.txt
│ │ ├── recursion-issue.txt
│ │ ├── regress-1.txt
│ │ ├── regress-10.txt
│ │ ├── regress-11.txt
│ │ ├── regress-12.txt
│ │ ├── regress-13.txt
│ │ ├── regress-14.txt
│ │ ├── regress-15.txt
│ │ ├── regress-16.txt
│ │ ├── regress-1674.txt
│ │ ├── regress-17.txt
│ │ ├── regress-18.txt
│ │ ├── regress-19.txt
│ │ ├── regress-1922.txt
│ │ ├── regress-1924.txt
│ │ ├── regress-2.txt
│ │ ├── regress-20.txt
│ │ ├── regress-2034.txt
│ │ ├── regress-2039.txt
│ │ ├── regress-21.txt
│ │ ├── regress-2110.txt
│ │ ├── regress-22.txt
│ │ ├── regress-23.txt
│ │ ├── regress-24.txt
│ │ ├── regress-25.txt
│ │ ├── regress-26.txt
│ │ ├── regress-2670.txt
│ │ ├── regress-27.txt
│ │ ├── regress-28.txt
│ │ ├── regress-29.txt
│ │ ├── regress-3.txt
│ │ ├── regress-30.txt
│ │ ├── regress-31.txt
│ │ ├── regress-32.txt
│ │ ├── regress-33.txt
│ │ ├── regress-34.txt
│ │ ├── regress-35.txt
│ │ ├── regress-36.txt
│ │ ├── regress-37.txt
│ │ ├── regress-4.txt
│ │ ├── regress-5.txt
│ │ ├── regress-6.txt
│ │ ├── regress-7.txt
│ │ ├── regress-8.txt
│ │ ├── regress-9.txt
│ │ ├── undefined-shifts.txt
│ │ ├── unterminated-annotation.txt
│ │ ├── unterminated-annotation2.txt
│ │ ├── wasm2c-ehv3-setjmp-volatile.txt
│ │ ├── wasm2c-try-br.txt
│ │ ├── wasm2c-try-reset.txt
│ │ └── write-memuse.txt
│ ├── roundtrip/
│ │ ├── apply-global-names.txt
│ │ ├── apply-memory-names.txt
│ │ ├── bulk-memory.txt
│ │ ├── bulk-memory64.txt
│ │ ├── code-metadata.txt
│ │ ├── custom-page-sizes.txt
│ │ ├── custom-sections.txt
│ │ ├── debug-import-names.txt
│ │ ├── debug-names-after-data.txt
│ │ ├── debug-names.txt
│ │ ├── elem-declare.txt
│ │ ├── elem-nonzero-table.txt
│ │ ├── fold-atomic-fence.txt
│ │ ├── fold-atomic.txt
│ │ ├── fold-basic.txt
│ │ ├── fold-block-labels.txt
│ │ ├── fold-block.txt
│ │ ├── fold-bulk-memory.txt
│ │ ├── fold-call-import-gen-names.txt
│ │ ├── fold-call.txt
│ │ ├── fold-callref.txt
│ │ ├── fold-fac.txt
│ │ ├── fold-function-references.txt
│ │ ├── fold-global-getset.txt
│ │ ├── fold-load-store.txt
│ │ ├── fold-load-store64.txt
│ │ ├── fold-local-getset.txt
│ │ ├── fold-multi.txt
│ │ ├── fold-nop.txt
│ │ ├── fold-reference-types.txt
│ │ ├── fold-rethrow.txt
│ │ ├── fold-simd.txt
│ │ ├── fold-tail-call.txt
│ │ ├── fold-throw.txt
│ │ ├── fold-try-delegate.txt
│ │ ├── fold-try-table.txt
│ │ ├── fold-try.txt
│ │ ├── fold-unreachable.txt
│ │ ├── func-index.txt
│ │ ├── generate-bulk-memory-names.txt
│ │ ├── generate-existing-name.txt
│ │ ├── generate-from-export-name.txt
│ │ ├── generate-from-import-name.txt
│ │ ├── generate-func-names.txt
│ │ ├── generate-func-type-names.txt
│ │ ├── generate-global-names.txt
│ │ ├── generate-if-label-names.txt
│ │ ├── generate-import-names.txt
│ │ ├── generate-label-names.txt
│ │ ├── generate-local-names.txt
│ │ ├── generate-some-names.txt
│ │ ├── generate-start-name.txt
│ │ ├── generate-tag-names.txt
│ │ ├── generate-tail-call.txt
│ │ ├── global-index.txt
│ │ ├── inline-export-func-name.txt
│ │ ├── inline-export-func.txt
│ │ ├── inline-export-global.txt
│ │ ├── inline-export-memory.txt
│ │ ├── inline-export-multi.txt
│ │ ├── inline-export-table.txt
│ │ ├── inline-export-tag.txt
│ │ ├── inline-import-export.txt
│ │ ├── inline-import-func.txt
│ │ ├── inline-import-global.txt
│ │ ├── inline-import-memory.txt
│ │ ├── inline-import-table.txt
│ │ ├── inline-import-tag.txt
│ │ ├── invalid-br-var.txt
│ │ ├── invalid-local-index.txt
│ │ ├── label.txt
│ │ ├── memory-index.txt
│ │ ├── memory-index64.txt
│ │ ├── memory-max.txt
│ │ ├── memory-max64.txt
│ │ ├── multi-value-block-type.txt
│ │ ├── named-locals.txt
│ │ ├── named-params.txt
│ │ ├── ref-types.txt
│ │ ├── reference-types.txt
│ │ ├── rethrow.txt
│ │ ├── select-type.txt
│ │ ├── simd.txt
│ │ ├── string-unicode-escape.txt
│ │ ├── table-copy-index.txt
│ │ ├── table-import-externref.txt
│ │ ├── table-index.txt
│ │ ├── table-init-index.txt
│ │ ├── try-delegate.txt
│ │ ├── try-table.txt
│ │ └── typed-func-refs.txt
│ ├── run-c-api-examples.py
│ ├── run-roundtrip.py
│ ├── run-spec-wasm2c.py
│ ├── run-tests.py
│ ├── spec/
│ │ ├── address.txt
│ │ ├── align.txt
│ │ ├── binary-leb128.txt
│ │ ├── binary.txt
│ │ ├── block.txt
│ │ ├── br.txt
│ │ ├── br_if.txt
│ │ ├── br_table.txt
│ │ ├── bulk.txt
│ │ ├── call.txt
│ │ ├── call_indirect.txt
│ │ ├── comments.txt
│ │ ├── const.txt
│ │ ├── conversions.txt
│ │ ├── custom-page-sizes/
│ │ │ ├── custom-page-sizes-invalid.txt
│ │ │ ├── custom-page-sizes.txt
│ │ │ ├── memory_max.txt
│ │ │ └── memory_max_i64.txt
│ │ ├── custom.txt
│ │ ├── data.txt
│ │ ├── elem.txt
│ │ ├── endianness.txt
│ │ ├── exception-handling/
│ │ │ ├── binary.txt
│ │ │ ├── exports.txt
│ │ │ ├── imports.txt
│ │ │ ├── legacy/
│ │ │ │ ├── rethrow.txt
│ │ │ │ ├── throw.txt
│ │ │ │ ├── try_catch.txt
│ │ │ │ └── try_delegate.txt
│ │ │ ├── ref_null.txt
│ │ │ ├── tag.txt
│ │ │ ├── throw.txt
│ │ │ ├── throw_ref.txt
│ │ │ └── try_table.txt
│ │ ├── exports.txt
│ │ ├── extended-const/
│ │ │ ├── data.txt
│ │ │ ├── elem.txt
│ │ │ └── global.txt
│ │ ├── f32.txt
│ │ ├── f32_bitwise.txt
│ │ ├── f32_cmp.txt
│ │ ├── f64.txt
│ │ ├── f64_bitwise.txt
│ │ ├── f64_cmp.txt
│ │ ├── fac.txt
│ │ ├── float_exprs.txt
│ │ ├── float_literals.txt
│ │ ├── float_memory.txt
│ │ ├── float_misc.txt
│ │ ├── forward.txt
│ │ ├── func.txt
│ │ ├── func_ptrs.txt
│ │ ├── function-references/
│ │ │ ├── binary.txt
│ │ │ ├── br_on_non_null.txt
│ │ │ ├── br_on_null.txt
│ │ │ ├── br_table.txt
│ │ │ ├── call_ref.txt
│ │ │ ├── data.txt
│ │ │ ├── elem.txt
│ │ │ ├── func.txt
│ │ │ ├── global.txt
│ │ │ ├── if.txt
│ │ │ ├── linking.txt
│ │ │ ├── local_get.txt
│ │ │ ├── local_init.txt
│ │ │ ├── ref.txt
│ │ │ ├── ref_as_non_null.txt
│ │ │ ├── ref_is_null.txt
│ │ │ ├── ref_null.txt
│ │ │ ├── return_call.txt
│ │ │ ├── return_call_indirect.txt
│ │ │ ├── return_call_ref.txt
│ │ │ ├── select.txt
│ │ │ ├── table-sub.txt
│ │ │ ├── table.txt
│ │ │ ├── type-equivalence.txt
│ │ │ ├── unreached-invalid.txt
│ │ │ └── unreached-valid.txt
│ │ ├── global.txt
│ │ ├── i32.txt
│ │ ├── i64.txt
│ │ ├── if.txt
│ │ ├── imports.txt
│ │ ├── inline-module.txt
│ │ ├── int_exprs.txt
│ │ ├── int_literals.txt
│ │ ├── labels.txt
│ │ ├── left-to-right.txt
│ │ ├── linking.txt
│ │ ├── load.txt
│ │ ├── local_get.txt
│ │ ├── local_set.txt
│ │ ├── local_tee.txt
│ │ ├── loop.txt
│ │ ├── memory.txt
│ │ ├── memory64/
│ │ │ ├── address.txt
│ │ │ ├── address64.txt
│ │ │ ├── align64.txt
│ │ │ ├── binary-leb128.txt
│ │ │ ├── binary.txt
│ │ │ ├── binary0.txt
│ │ │ ├── call_indirect.txt
│ │ │ ├── endianness64.txt
│ │ │ ├── float_memory64.txt
│ │ │ ├── imports.txt
│ │ │ ├── load64.txt
│ │ │ ├── memory.txt
│ │ │ ├── memory64.txt
│ │ │ ├── memory_copy.txt
│ │ │ ├── memory_fill.txt
│ │ │ ├── memory_grow64.txt
│ │ │ ├── memory_init.txt
│ │ │ ├── memory_redundancy64.txt
│ │ │ ├── memory_trap64.txt
│ │ │ ├── simd_address.txt
│ │ │ ├── table.txt
│ │ │ ├── table_copy.txt
│ │ │ ├── table_copy_mixed.txt
│ │ │ ├── table_fill.txt
│ │ │ ├── table_get.txt
│ │ │ ├── table_grow.txt
│ │ │ ├── table_init.txt
│ │ │ ├── table_set.txt
│ │ │ └── table_size.txt
│ │ ├── memory_copy.txt
│ │ ├── memory_fill.txt
│ │ ├── memory_grow.txt
│ │ ├── memory_init.txt
│ │ ├── memory_redundancy.txt
│ │ ├── memory_size.txt
│ │ ├── memory_trap.txt
│ │ ├── multi-memory/
│ │ │ ├── address0.txt
│ │ │ ├── address1.txt
│ │ │ ├── align.txt
│ │ │ ├── align0.txt
│ │ │ ├── binary.txt
│ │ │ ├── binary0.txt
│ │ │ ├── data.txt
│ │ │ ├── data0.txt
│ │ │ ├── data1.txt
│ │ │ ├── data_drop0.txt
│ │ │ ├── exports0.txt
│ │ │ ├── float_exprs0.txt
│ │ │ ├── float_exprs1.txt
│ │ │ ├── float_memory0.txt
│ │ │ ├── imports.txt
│ │ │ ├── imports0.txt
│ │ │ ├── imports1.txt
│ │ │ ├── imports2.txt
│ │ │ ├── imports3.txt
│ │ │ ├── imports4.txt
│ │ │ ├── linking0.txt
│ │ │ ├── linking1.txt
│ │ │ ├── linking2.txt
│ │ │ ├── linking3.txt
│ │ │ ├── load.txt
│ │ │ ├── load0.txt
│ │ │ ├── load1.txt
│ │ │ ├── load2.txt
│ │ │ ├── memory-multi.txt
│ │ │ ├── memory.txt
│ │ │ ├── memory_copy0.txt
│ │ │ ├── memory_copy1.txt
│ │ │ ├── memory_fill0.txt
│ │ │ ├── memory_grow.txt
│ │ │ ├── memory_init0.txt
│ │ │ ├── memory_size.txt
│ │ │ ├── memory_size0.txt
│ │ │ ├── memory_size1.txt
│ │ │ ├── memory_size2.txt
│ │ │ ├── memory_size3.txt
│ │ │ ├── memory_trap0.txt
│ │ │ ├── memory_trap1.txt
│ │ │ ├── simd_memory-multi.txt
│ │ │ ├── start0.txt
│ │ │ ├── store.txt
│ │ │ ├── store0.txt
│ │ │ ├── store1.txt
│ │ │ └── traps0.txt
│ │ ├── names.txt
│ │ ├── nop.txt
│ │ ├── obsolete-keywords.txt
│ │ ├── ref_func.txt
│ │ ├── ref_is_null.txt
│ │ ├── ref_null.txt
│ │ ├── relaxed-simd/
│ │ │ ├── i16x8_relaxed_q15mulr_s.txt
│ │ │ ├── i32x4_relaxed_trunc.txt
│ │ │ ├── i8x16_relaxed_swizzle.txt
│ │ │ ├── relaxed_dot_product.txt
│ │ │ ├── relaxed_laneselect.txt
│ │ │ ├── relaxed_madd_nmadd.txt
│ │ │ └── relaxed_min_max.txt
│ │ ├── return.txt
│ │ ├── select.txt
│ │ ├── simd_address.txt
│ │ ├── simd_align.txt
│ │ ├── simd_bit_shift.txt
│ │ ├── simd_bitwise.txt
│ │ ├── simd_boolean.txt
│ │ ├── simd_const.txt
│ │ ├── simd_conversions.txt
│ │ ├── simd_f32x4.txt
│ │ ├── simd_f32x4_arith.txt
│ │ ├── simd_f32x4_cmp.txt
│ │ ├── simd_f32x4_pmin_pmax.txt
│ │ ├── simd_f32x4_rounding.txt
│ │ ├── simd_f64x2.txt
│ │ ├── simd_f64x2_arith.txt
│ │ ├── simd_f64x2_cmp.txt
│ │ ├── simd_f64x2_pmin_pmax.txt
│ │ ├── simd_f64x2_rounding.txt
│ │ ├── simd_i16x8_arith.txt
│ │ ├── simd_i16x8_arith2.txt
│ │ ├── simd_i16x8_cmp.txt
│ │ ├── simd_i16x8_extadd_pairwise_i8x16.txt
│ │ ├── simd_i16x8_extmul_i8x16.txt
│ │ ├── simd_i16x8_q15mulr_sat_s.txt
│ │ ├── simd_i16x8_sat_arith.txt
│ │ ├── simd_i32x4_arith.txt
│ │ ├── simd_i32x4_arith2.txt
│ │ ├── simd_i32x4_cmp.txt
│ │ ├── simd_i32x4_dot_i16x8.txt
│ │ ├── simd_i32x4_extadd_pairwise_i16x8.txt
│ │ ├── simd_i32x4_extmul_i16x8.txt
│ │ ├── simd_i32x4_trunc_sat_f32x4.txt
│ │ ├── simd_i32x4_trunc_sat_f64x2.txt
│ │ ├── simd_i64x2_arith.txt
│ │ ├── simd_i64x2_arith2.txt
│ │ ├── simd_i64x2_cmp.txt
│ │ ├── simd_i64x2_extmul_i32x4.txt
│ │ ├── simd_i8x16_arith.txt
│ │ ├── simd_i8x16_arith2.txt
│ │ ├── simd_i8x16_cmp.txt
│ │ ├── simd_i8x16_sat_arith.txt
│ │ ├── simd_int_to_int_extend.txt
│ │ ├── simd_lane.txt
│ │ ├── simd_linking.txt
│ │ ├── simd_load.txt
│ │ ├── simd_load16_lane.txt
│ │ ├── simd_load32_lane.txt
│ │ ├── simd_load64_lane.txt
│ │ ├── simd_load8_lane.txt
│ │ ├── simd_load_extend.txt
│ │ ├── simd_load_splat.txt
│ │ ├── simd_load_zero.txt
│ │ ├── simd_splat.txt
│ │ ├── simd_store.txt
│ │ ├── simd_store16_lane.txt
│ │ ├── simd_store32_lane.txt
│ │ ├── simd_store64_lane.txt
│ │ ├── simd_store8_lane.txt
│ │ ├── skip-stack-guard-page.txt
│ │ ├── stack.txt
│ │ ├── start.txt
│ │ ├── store.txt
│ │ ├── switch.txt
│ │ ├── table-sub.txt
│ │ ├── table.txt
│ │ ├── table_copy.txt
│ │ ├── table_fill.txt
│ │ ├── table_get.txt
│ │ ├── table_grow.txt
│ │ ├── table_init.txt
│ │ ├── table_set.txt
│ │ ├── table_size.txt
│ │ ├── tail-call/
│ │ │ ├── return_call.txt
│ │ │ └── return_call_indirect.txt
│ │ ├── token.txt
│ │ ├── traps.txt
│ │ ├── type.txt
│ │ ├── unreachable.txt
│ │ ├── unreached-invalid.txt
│ │ ├── unreached-valid.txt
│ │ ├── unwind.txt
│ │ ├── utf8-custom-section-id.txt
│ │ ├── utf8-import-field.txt
│ │ ├── utf8-import-module.txt
│ │ └── utf8-invalid-encoding.txt
│ ├── spec-new/
│ │ ├── README.md
│ │ ├── wide-arithmetic.txt
│ │ └── wide-arithmetic.wast
│ ├── spec-wasm2c-prefix.c
│ ├── spectest-interp-assert-failure.txt
│ ├── spectest-interp-error-count.txt
│ ├── spectest-interp-invalid-literal.txt
│ ├── stats/
│ │ ├── basic.txt
│ │ ├── cutoff.txt
│ │ └── immediates.txt
│ ├── strip/
│ │ ├── basic.txt
│ │ ├── keep_section.txt
│ │ ├── names.txt
│ │ ├── no-custom-sections.txt
│ │ ├── out_file.txt
│ │ └── remove_section.txt
│ ├── too-many-arguments.txt
│ ├── two-commands.txt
│ ├── typecheck/
│ │ ├── atomic-no-shared-memory.txt
│ │ ├── bad-assertexception-type-mismatch.txt
│ │ ├── bad-assertreturn-invoke-type-mismatch.txt
│ │ ├── bad-assertreturn-type-mismatch.txt
│ │ ├── bad-atomic-type-mismatch.txt
│ │ ├── bad-binary-type-mismatch-1.txt
│ │ ├── bad-binary-type-mismatch-2.txt
│ │ ├── bad-block-multi-mismatch.txt
│ │ ├── bad-brtable-type-mismatch.txt
│ │ ├── bad-bulk-memory-invalid-segment.txt
│ │ ├── bad-bulk-memory-no-memory.txt
│ │ ├── bad-bulk-memory-no-table.txt
│ │ ├── bad-bulk-memory-type-mismatch.txt
│ │ ├── bad-call-result-mismatch.txt
│ │ ├── bad-call-type-mismatch.txt
│ │ ├── bad-callimport-type-mismatch.txt
│ │ ├── bad-callindirect-func-type-mismatch.txt
│ │ ├── bad-callindirect-type-mismatch.txt
│ │ ├── bad-callref-empty.txt
│ │ ├── bad-callref-int32.txt
│ │ ├── bad-callref-nosubtype.txt
│ │ ├── bad-callref-null.txt
│ │ ├── bad-callref-wrong-signature.txt
│ │ ├── bad-cast-type-mismatch.txt
│ │ ├── bad-compare-type-mismatch-1.txt
│ │ ├── bad-compare-type-mismatch-2.txt
│ │ ├── bad-convert-type-mismatch.txt
│ │ ├── bad-delegate-depth.txt
│ │ ├── bad-empty-catch-all.txt
│ │ ├── bad-empty-catch.txt
│ │ ├── bad-expr-if.txt
│ │ ├── bad-function-result-type-mismatch.txt
│ │ ├── bad-global-globalget-type-mismatch.txt
│ │ ├── bad-global-no-init-expr.txt
│ │ ├── bad-global-type-mismatch.txt
│ │ ├── bad-if-condition-type-mismatch.txt
│ │ ├── bad-if-multi-mismatch.txt
│ │ ├── bad-if-type-mismatch.txt
│ │ ├── bad-if-value-void.txt
│ │ ├── bad-invoke-type-mismatch.txt
│ │ ├── bad-load-type-mismatch.txt
│ │ ├── bad-localset-type-mismatch.txt
│ │ ├── bad-loop-multi-mismatch.txt
│ │ ├── bad-memory-grow-type-mismatch.txt
│ │ ├── bad-nested-br.txt
│ │ ├── bad-no-shared-memory.txt
│ │ ├── bad-reference-types-no-table.txt
│ │ ├── bad-rethrow-depth.txt
│ │ ├── bad-rethrow-not-in-catch.txt
│ │ ├── bad-return-type-mismatch.txt
│ │ ├── bad-returncall-type-mismatch.txt
│ │ ├── bad-returncallindirect-no-table.txt
│ │ ├── bad-returncallindirect-type-mismatch.txt
│ │ ├── bad-select-cond.txt
│ │ ├── bad-select-value0.txt
│ │ ├── bad-select-value1.txt
│ │ ├── bad-simd-lane.txt
│ │ ├── bad-store-index-type-mismatch.txt
│ │ ├── bad-tag-results.txt
│ │ ├── bad-typed-select-type-mismatch.txt
│ │ ├── bad-unary-type-mismatch.txt
│ │ ├── br-multi.txt
│ │ ├── br-table-loop.txt
│ │ ├── brif-multi.txt
│ │ ├── brtable-multi.txt
│ │ ├── delegate.txt
│ │ ├── if-anyref.txt
│ │ ├── if-then-br.txt
│ │ ├── if-value.txt
│ │ ├── label-redefinition.txt
│ │ ├── missing-ref.txt
│ │ ├── nested-br.txt
│ │ ├── nocheck.txt
│ │ ├── rethrow.txt
│ │ ├── return-drop-value-2.txt
│ │ ├── return-drop-value.txt
│ │ ├── return-value.txt
│ │ ├── try-delegate.txt
│ │ └── typed-select-result-type.txt
│ ├── update-spec-tests.py
│ ├── utils.py
│ ├── wasi/
│ │ ├── clock.txt
│ │ ├── empty.txt
│ │ ├── exit.txt
│ │ ├── oob_trap.txt
│ │ └── write_stdout.txt
│ ├── wasm2c/
│ │ ├── add.txt
│ │ ├── address-overflow.txt
│ │ ├── bad-enable-feature.txt
│ │ ├── check-imports.txt
│ │ ├── duplicate-names.txt
│ │ ├── export-names.txt
│ │ ├── hello.txt
│ │ ├── minimal.txt
│ │ ├── spec/
│ │ │ ├── address.txt
│ │ │ ├── align.txt
│ │ │ ├── binary-leb128.txt
│ │ │ ├── binary.txt
│ │ │ ├── block.txt
│ │ │ ├── br.txt
│ │ │ ├── br_if.txt
│ │ │ ├── br_table.txt
│ │ │ ├── bulk.txt
│ │ │ ├── call.txt
│ │ │ ├── call_indirect.txt
│ │ │ ├── comments.txt
│ │ │ ├── const.txt
│ │ │ ├── conversions.txt
│ │ │ ├── custom-page-sizes/
│ │ │ │ ├── custom-page-sizes-invalid.txt
│ │ │ │ ├── custom-page-sizes.txt
│ │ │ │ ├── memory_max.txt
│ │ │ │ └── memory_max_i64.txt
│ │ │ ├── custom.txt
│ │ │ ├── data.txt
│ │ │ ├── elem.txt
│ │ │ ├── endianness.txt
│ │ │ ├── exception-handling/
│ │ │ │ ├── binary.txt
│ │ │ │ ├── exports.txt
│ │ │ │ ├── imports.txt
│ │ │ │ ├── legacy/
│ │ │ │ │ ├── rethrow.txt
│ │ │ │ │ ├── throw.txt
│ │ │ │ │ ├── try_catch.txt
│ │ │ │ │ └── try_delegate.txt
│ │ │ │ ├── ref_null.txt
│ │ │ │ ├── tag.txt
│ │ │ │ ├── throw.txt
│ │ │ │ ├── throw_ref.txt
│ │ │ │ └── try_table.txt
│ │ │ ├── exports.txt
│ │ │ ├── extended-const/
│ │ │ │ ├── data.txt
│ │ │ │ ├── elem.txt
│ │ │ │ └── global.txt
│ │ │ ├── f32.txt
│ │ │ ├── f32_bitwise.txt
│ │ │ ├── f32_cmp.txt
│ │ │ ├── f64.txt
│ │ │ ├── f64_bitwise.txt
│ │ │ ├── f64_cmp.txt
│ │ │ ├── fac.txt
│ │ │ ├── float_exprs.txt
│ │ │ ├── float_literals.txt
│ │ │ ├── float_memory.txt
│ │ │ ├── float_misc.txt
│ │ │ ├── forward.txt
│ │ │ ├── func.txt
│ │ │ ├── func_ptrs.txt
│ │ │ ├── global.txt
│ │ │ ├── i32.txt
│ │ │ ├── i64.txt
│ │ │ ├── if.txt
│ │ │ ├── imports.txt
│ │ │ ├── inline-module.txt
│ │ │ ├── int_exprs.txt
│ │ │ ├── int_literals.txt
│ │ │ ├── labels.txt
│ │ │ ├── left-to-right.txt
│ │ │ ├── linking.txt
│ │ │ ├── load.txt
│ │ │ ├── local_get.txt
│ │ │ ├── local_set.txt
│ │ │ ├── local_tee.txt
│ │ │ ├── loop.txt
│ │ │ ├── memory.txt
│ │ │ ├── memory64/
│ │ │ │ ├── address.txt
│ │ │ │ ├── address64.txt
│ │ │ │ ├── align64.txt
│ │ │ │ ├── binary-leb128.txt
│ │ │ │ ├── binary.txt
│ │ │ │ ├── binary0.txt
│ │ │ │ ├── call_indirect.txt
│ │ │ │ ├── endianness64.txt
│ │ │ │ ├── float_memory64.txt
│ │ │ │ ├── imports.txt
│ │ │ │ ├── load64.txt
│ │ │ │ ├── memory.txt
│ │ │ │ ├── memory64.txt
│ │ │ │ ├── memory_copy.txt
│ │ │ │ ├── memory_fill.txt
│ │ │ │ ├── memory_grow64.txt
│ │ │ │ ├── memory_init.txt
│ │ │ │ ├── memory_redundancy64.txt
│ │ │ │ ├── memory_trap64.txt
│ │ │ │ ├── simd_address.txt
│ │ │ │ ├── table.txt
│ │ │ │ ├── table_copy.txt
│ │ │ │ ├── table_copy_mixed.txt
│ │ │ │ ├── table_fill.txt
│ │ │ │ ├── table_get.txt
│ │ │ │ ├── table_grow.txt
│ │ │ │ ├── table_init.txt
│ │ │ │ ├── table_set.txt
│ │ │ │ └── table_size.txt
│ │ │ ├── memory_copy.txt
│ │ │ ├── memory_fill.txt
│ │ │ ├── memory_grow.txt
│ │ │ ├── memory_init.txt
│ │ │ ├── memory_redundancy.txt
│ │ │ ├── memory_size.txt
│ │ │ ├── memory_trap.txt
│ │ │ ├── multi-memory/
│ │ │ │ ├── address0.txt
│ │ │ │ ├── address1.txt
│ │ │ │ ├── align.txt
│ │ │ │ ├── align0.txt
│ │ │ │ ├── binary.txt
│ │ │ │ ├── binary0.txt
│ │ │ │ ├── data.txt
│ │ │ │ ├── data0.txt
│ │ │ │ ├── data1.txt
│ │ │ │ ├── data_drop0.txt
│ │ │ │ ├── exports0.txt
│ │ │ │ ├── float_exprs0.txt
│ │ │ │ ├── float_exprs1.txt
│ │ │ │ ├── float_memory0.txt
│ │ │ │ ├── imports.txt
│ │ │ │ ├── imports0.txt
│ │ │ │ ├── imports1.txt
│ │ │ │ ├── imports2.txt
│ │ │ │ ├── imports3.txt
│ │ │ │ ├── imports4.txt
│ │ │ │ ├── linking0.txt
│ │ │ │ ├── linking1.txt
│ │ │ │ ├── linking2.txt
│ │ │ │ ├── linking3.txt
│ │ │ │ ├── load.txt
│ │ │ │ ├── load0.txt
│ │ │ │ ├── load1.txt
│ │ │ │ ├── load2.txt
│ │ │ │ ├── memory-multi.txt
│ │ │ │ ├── memory.txt
│ │ │ │ ├── memory_copy0.txt
│ │ │ │ ├── memory_copy1.txt
│ │ │ │ ├── memory_fill0.txt
│ │ │ │ ├── memory_grow.txt
│ │ │ │ ├── memory_init0.txt
│ │ │ │ ├── memory_size.txt
│ │ │ │ ├── memory_size0.txt
│ │ │ │ ├── memory_size1.txt
│ │ │ │ ├── memory_size2.txt
│ │ │ │ ├── memory_size3.txt
│ │ │ │ ├── memory_trap0.txt
│ │ │ │ ├── memory_trap1.txt
│ │ │ │ ├── simd_memory-multi.txt
│ │ │ │ ├── start0.txt
│ │ │ │ ├── store.txt
│ │ │ │ ├── store0.txt
│ │ │ │ ├── store1.txt
│ │ │ │ └── traps0.txt
│ │ │ ├── names.txt
│ │ │ ├── nop.txt
│ │ │ ├── obsolete-keywords.txt
│ │ │ ├── ref_func.txt
│ │ │ ├── ref_is_null.txt
│ │ │ ├── ref_null.txt
│ │ │ ├── return.txt
│ │ │ ├── select.txt
│ │ │ ├── simd_address.txt
│ │ │ ├── simd_align.txt
│ │ │ ├── simd_bit_shift.txt
│ │ │ ├── simd_bitwise.txt
│ │ │ ├── simd_boolean.txt
│ │ │ ├── simd_const.txt
│ │ │ ├── simd_conversions.txt
│ │ │ ├── simd_f32x4.txt
│ │ │ ├── simd_f32x4_arith.txt
│ │ │ ├── simd_f32x4_cmp.txt
│ │ │ ├── simd_f32x4_pmin_pmax.txt
│ │ │ ├── simd_f32x4_rounding.txt
│ │ │ ├── simd_f64x2.txt
│ │ │ ├── simd_f64x2_arith.txt
│ │ │ ├── simd_f64x2_cmp.txt
│ │ │ ├── simd_f64x2_pmin_pmax.txt
│ │ │ ├── simd_f64x2_rounding.txt
│ │ │ ├── simd_i16x8_arith.txt
│ │ │ ├── simd_i16x8_arith2.txt
│ │ │ ├── simd_i16x8_cmp.txt
│ │ │ ├── simd_i16x8_extadd_pairwise_i8x16.txt
│ │ │ ├── simd_i16x8_extmul_i8x16.txt
│ │ │ ├── simd_i16x8_q15mulr_sat_s.txt
│ │ │ ├── simd_i16x8_sat_arith.txt
│ │ │ ├── simd_i32x4_arith.txt
│ │ │ ├── simd_i32x4_arith2.txt
│ │ │ ├── simd_i32x4_cmp.txt
│ │ │ ├── simd_i32x4_dot_i16x8.txt
│ │ │ ├── simd_i32x4_extadd_pairwise_i16x8.txt
│ │ │ ├── simd_i32x4_extmul_i16x8.txt
│ │ │ ├── simd_i32x4_trunc_sat_f32x4.txt
│ │ │ ├── simd_i32x4_trunc_sat_f64x2.txt
│ │ │ ├── simd_i64x2_arith.txt
│ │ │ ├── simd_i64x2_arith2.txt
│ │ │ ├── simd_i64x2_cmp.txt
│ │ │ ├── simd_i64x2_extmul_i32x4.txt
│ │ │ ├── simd_i8x16_arith.txt
│ │ │ ├── simd_i8x16_arith2.txt
│ │ │ ├── simd_i8x16_cmp.txt
│ │ │ ├── simd_i8x16_sat_arith.txt
│ │ │ ├── simd_int_to_int_extend.txt
│ │ │ ├── simd_lane.txt
│ │ │ ├── simd_linking.txt
│ │ │ ├── simd_load.txt
│ │ │ ├── simd_load16_lane.txt
│ │ │ ├── simd_load32_lane.txt
│ │ │ ├── simd_load64_lane.txt
│ │ │ ├── simd_load8_lane.txt
│ │ │ ├── simd_load_extend.txt
│ │ │ ├── simd_load_splat.txt
│ │ │ ├── simd_load_zero.txt
│ │ │ ├── simd_splat.txt
│ │ │ ├── simd_store.txt
│ │ │ ├── simd_store16_lane.txt
│ │ │ ├── simd_store32_lane.txt
│ │ │ ├── simd_store64_lane.txt
│ │ │ ├── simd_store8_lane.txt
│ │ │ ├── skip-stack-guard-page.txt
│ │ │ ├── stack.txt
│ │ │ ├── start.txt
│ │ │ ├── store.txt
│ │ │ ├── switch.txt
│ │ │ ├── table-sub.txt
│ │ │ ├── table.txt
│ │ │ ├── table_copy.txt
│ │ │ ├── table_fill.txt
│ │ │ ├── table_get.txt
│ │ │ ├── table_grow.txt
│ │ │ ├── table_init.txt
│ │ │ ├── table_set.txt
│ │ │ ├── table_size.txt
│ │ │ ├── tail-call/
│ │ │ │ ├── return_call.txt
│ │ │ │ └── return_call_indirect.txt
│ │ │ ├── threads/
│ │ │ │ └── atomic.txt
│ │ │ ├── token.txt
│ │ │ ├── traps.txt
│ │ │ ├── type.txt
│ │ │ ├── unreachable.txt
│ │ │ ├── unreached-invalid.txt
│ │ │ ├── unreached-valid.txt
│ │ │ ├── unwind.txt
│ │ │ ├── utf8-custom-section-id.txt
│ │ │ ├── utf8-import-field.txt
│ │ │ ├── utf8-import-module.txt
│ │ │ └── utf8-invalid-encoding.txt
│ │ ├── spec-multi-output/
│ │ │ ├── call.txt
│ │ │ ├── linking.txt
│ │ │ └── memory_init.txt
│ │ └── tail-calls.txt
│ ├── wast2json/
│ │ ├── module-binary.txt
│ │ └── test-invalid-quoted-modules.txt
│ └── wat2wasm_stdout.txt
├── ubsan.blacklist
└── wasm2c/
├── .gitignore
├── README.md
├── examples/
│ ├── callback/
│ │ ├── Makefile
│ │ ├── callback.wat
│ │ └── main.c
│ ├── fac/
│ │ ├── Makefile
│ │ ├── fac.c
│ │ ├── fac.h
│ │ ├── fac.wat
│ │ └── main.c
│ ├── rot13/
│ │ ├── Makefile
│ │ ├── main.c
│ │ └── rot13.wat
│ └── threads/
│ ├── Makefile
│ ├── sample.wat
│ └── threads.c
├── wasm-rt-exceptions-impl.c
├── wasm-rt-exceptions.h
├── wasm-rt-impl-tableops.inc
├── wasm-rt-impl.c
├── wasm-rt-impl.h
├── wasm-rt-mem-impl-helper.inc
├── wasm-rt-mem-impl.c
└── wasm-rt.h
Condensed preview — 1850 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,312K chars).
[
{
"path": ".clang-format",
"chars": 23,
"preview": "BasedOnStyle: Chromium\n"
},
{
"path": ".flake8",
"chars": 121,
"preview": "[flake8]\n# E501: line too long\n# W504: line break after binary operator\nignore = E501,W504\nexclude = ./third_party ./out"
},
{
"path": ".git-blame-ignore-revs",
"chars": 359,
"preview": "# This file contains a list of commits that are not likely what you\n# are looking for in a blame, such as mass reformatt"
},
{
"path": ".gitattributes",
"chars": 878,
"preview": "* text=auto\n*.c text\n*.h text\n*.js text\n*.l text\n*.md text\n*.py text\n*.rst text\n*.sh text\n*.txt text\n*.y text\ndocs/demo/"
},
{
"path": ".github/actions/release-archive/action.yml",
"chars": 1664,
"preview": "name: Upload release archive\ndescription: Bundles an archive of artifacts and uploads to a GitHub release. The artifacts"
},
{
"path": ".github/workflows/build.yml",
"chars": 9136,
"preview": "name: CI\n\non:\n create:\n tags:\n push:\n branches:\n - main\n pull_request:\n\njobs:\n lint:\n name: lint\n r"
},
{
"path": ".github/workflows/build_release.yml",
"chars": 2450,
"preview": "name: Build Release\n\n# Trigger whenever a release is created\non:\n release:\n types:\n - created\n\npermissions:\n c"
},
{
"path": ".github/workflows/build_source_release.yml",
"chars": 1392,
"preview": "name: Build Source Release\n\n# Trigger whenever a release is created\non:\n release:\n types:\n - created\n\npermissio"
},
{
"path": ".github/workflows/wabt-cifuzz.yml",
"chars": 603,
"preview": "name: CIFuzz\non: [pull_request]\njobs:\n Fuzzing:\n runs-on: ubuntu-latest\n steps:\n - name: Build Fuzzers\n i"
},
{
"path": ".gitignore",
"chars": 81,
"preview": "/bin\n/build\n/out\n/fuzz-out\n/emscripten\n*.pyc\n.idea/\n.vscode/\n/cmake-build-debug/\n"
},
{
"path": ".gitmodules",
"chars": 737,
"preview": "[submodule \"third_party/testsuite\"]\n\tpath = third_party/testsuite\n\turl = https://github.com/WebAssembly/testsuite\n[submo"
},
{
"path": ".style.yapf",
"chars": 87,
"preview": "[style]\nsplit_before_named_assigns = False\nbased_on_style = chromium\ncolumn_limit = 79\n"
},
{
"path": "CMakeLists.txt",
"chars": 27463,
"preview": "#\n# Copyright 2016 WebAssembly Community Group participants\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lic"
},
{
"path": "Contributing.md",
"chars": 345,
"preview": "# Contributing to WebAssembly\n\nInterested in participating? Please follow\n[the same contributing guidelines as the desig"
},
{
"path": "LICENSE",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "Makefile",
"chars": 5108,
"preview": "#\n# Copyright 2016 WebAssembly Community Group participants\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lic"
},
{
"path": "README.md",
"chars": 14597,
"preview": "[](https://github.com/WebAssembly/wabt/ac"
},
{
"path": "SECURITY.md",
"chars": 611,
"preview": "# Security Policy\n\nWABT is maintained by volunteers on a reasonable-effort basis. If you\nhave discovered a security vuln"
},
{
"path": "docs/decompiler.md",
"chars": 7132,
"preview": "# wasm-decompile\n\nDecompiles binary wasm modules into a text format that is significantly\nmore compact and familiar (for"
},
{
"path": "docs/demo/custom.css",
"chars": 2377,
"preview": "html {\n font-size: 80%;\n line-height: 1.3;\n}\n\n* {\n box-sizing: border-box;\n}\n\nbody {\n font-family: sans-serif;\n fon"
},
{
"path": "docs/demo/index.html",
"chars": 1327,
"preview": "<!--\n Copyright 2017 WebAssembly Community Group participants\n\n Licensed under the Apache License, Version 2.0 (the \"Lic"
},
{
"path": "docs/demo/libwabt.js",
"chars": 26869,
"preview": "async function WabtModule(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;va"
},
{
"path": "docs/demo/share.js",
"chars": 1951,
"preview": "/*\n * Copyright 2026 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "docs/demo/third_party/.gitignore",
"chars": 13,
"preview": "node_modules\n"
},
{
"path": "docs/demo/third_party/README.md",
"chars": 1420,
"preview": "# WABT Demo Third-Party Dependencies\n\nThis directory contains the build configuration for third-party dependencies\nused "
},
{
"path": "docs/demo/third_party/index.js",
"chars": 932,
"preview": "/*\n * Copyright 2026 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "docs/demo/third_party/package.json",
"chars": 638,
"preview": "{\n \"name\": \"third_party\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"build\": "
},
{
"path": "docs/demo/third_party.bundle.js",
"chars": 517644,
"preview": "var cp=0,Ui=class{constructor(e,t){this.from=e,this.to=t}},z=class{constructor(e={}){this.id=cp++,this.perNode=!!e.perNo"
},
{
"path": "docs/demo/wasm2wat/demo.js",
"chars": 4390,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "docs/demo/wasm2wat/examples.js",
"chars": 2300,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "docs/demo/wasm2wat/index.html",
"chars": 2622,
"preview": "<!--\n Copyright 2017 WebAssembly Community Group participants\n\n Licensed under the Apache License, Version 2.0 (the \"Lic"
},
{
"path": "docs/demo/wat2wasm/demo.js",
"chars": 6477,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "docs/demo/wat2wasm/examples.js",
"chars": 3775,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "docs/demo/wat2wasm/index.html",
"chars": 3103,
"preview": "<!--\n Copyright 2016 WebAssembly Community Group participants\n\n Licensed under the Apache License, Version 2.0 (the \"Lic"
},
{
"path": "docs/demo/wat2wasm/worker.js",
"chars": 786,
"preview": "// This worker runs the generated WebAssembly module and sends console.log\n// output back to the main thread in order to"
},
{
"path": "docs/doc/spectest-interp.1.html",
"chars": 7226,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wasm-decompile.1.html",
"chars": 7010,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wasm-interp.1.html",
"chars": 9096,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wasm-objdump.1.html",
"chars": 4600,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wasm-stats.1.html",
"chars": 7274,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wasm-strip.1.html",
"chars": 3604,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wasm-validate.1.html",
"chars": 7067,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wasm2c.1.html",
"chars": 7723,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wasm2wat.1.html",
"chars": 8369,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wast2json.1.html",
"chars": 7975,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wat-desugar.1.html",
"chars": 7948,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/doc/wat2wasm.1.html",
"chars": 8458,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-sca"
},
{
"path": "docs/wast2json.md",
"chars": 15137,
"preview": "# wast2json\n\n`wast2json` converts a `.wast` file to a `.json` file, and a collection of\nassociated `.wat` file and `.was"
},
{
"path": "fuzz-in/wast/basic.txt",
"chars": 59,
"preview": "(module\n (func (result i32)\n (return (i32.const 42))))\n"
},
{
"path": "fuzz-in/wast.dict",
"chars": 5477,
"preview": "# AFL dictionary for the WAST format\n\nopen=\"(\"\nclose=\")\"\ncomment=\";;\"\nblock_comment_open=\"(;\"\nblock_comment_close=\";)\"\n\n"
},
{
"path": "fuzzers/read_binary_interp_fuzzer.cc",
"chars": 1564,
"preview": "// Copyright 2019 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use th"
},
{
"path": "fuzzers/read_binary_ir_fuzzer.cc",
"chars": 1477,
"preview": "// Copyright 2019 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use th"
},
{
"path": "fuzzers/wasm2wat_fuzzer.cc",
"chars": 951,
"preview": "// Copyright 2019 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use th"
},
{
"path": "fuzzers/wasm_objdump_fuzzer.cc",
"chars": 1532,
"preview": "// Copyright 2019 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use th"
},
{
"path": "fuzzers/wat2wasm_fuzzer.cc",
"chars": 1158,
"preview": "// Copyright 2019 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use th"
},
{
"path": "include/wabt/apply-names.h",
"chars": 1088,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/base-types.h",
"chars": 1123,
"preview": "/*\n * Copyright 2021 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/binary-reader-ir.h",
"chars": 1100,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/binary-reader-logging.h",
"chars": 19414,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/binary-reader-nop.h",
"chars": 25039,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/binary-reader-objdump.h",
"chars": 2518,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/binary-reader-stats.h",
"chars": 2701,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/binary-reader.h",
"chars": 23665,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/binary-writer-spec.h",
"chars": 1997,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/binary-writer.h",
"chars": 1819,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/binary.h",
"chars": 3407,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/binding-hash.h",
"chars": 2133,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/c-writer.h",
"chars": 1801,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/cast.h",
"chars": 3144,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/color.h",
"chars": 2029,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/common.h",
"chars": 13035,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/decompiler-ast.h",
"chars": 14508,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/decompiler-ls.h",
"chars": 8948,
"preview": "/*\n * Copyright 2019 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/decompiler-naming.h",
"chars": 7086,
"preview": "/*\n * Copyright 2019 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/decompiler.h",
"chars": 927,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/error-formatter.h",
"chars": 1785,
"preview": "/*\n * Copyright 2018 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/error.h",
"chars": 1407,
"preview": "/*\n * Copyright 2018 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/expr-visitor.h",
"chars": 11568,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/feature.def",
"chars": 2853,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/feature.h",
"chars": 1712,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/filenames.h",
"chars": 1455,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/generate-names.h",
"chars": 1218,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/interp/binary-reader-interp.h",
"chars": 1205,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/interp/interp-inl.h",
"chars": 26985,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/interp/interp-math.h",
"chars": 15302,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/interp/interp-util.h",
"chars": 1373,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/interp/interp-wasi.h",
"chars": 1272,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/interp/interp.h",
"chars": 32591,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/interp/istream.h",
"chars": 4697,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/intrusive-list.h",
"chars": 15566,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/ir-util.h",
"chars": 2097,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/ir.h",
"chars": 42579,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/leb128.h",
"chars": 2529,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/lexer-source-line-finder.h",
"chars": 1815,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/lexer-source.h",
"chars": 1359,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/literal.h",
"chars": 4213,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/opcode-code-table.h",
"chars": 1185,
"preview": "/*\n * Copyright 2018 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/opcode.def",
"chars": 52637,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/opcode.h",
"chars": 5926,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/option-parser.h",
"chars": 2831,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/range.h",
"chars": 990,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/resolve-names.h",
"chars": 933,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/result.h",
"chars": 1591,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/sha256.h",
"chars": 865,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/shared-validator.h",
"chars": 13735,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/stream.h",
"chars": 6678,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/string-format.h",
"chars": 2598,
"preview": "/*\n * Copyright 2021 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/string-util.h",
"chars": 2185,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/token.def",
"chars": 6032,
"preview": "/*\n * Copyright 2018 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/token.h",
"chars": 3401,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/tracing.h",
"chars": 2036,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/type-checker.h",
"chars": 9909,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/type.h",
"chars": 7136,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/utf8.h",
"chars": 801,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/validator.h",
"chars": 1098,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/wast-lexer.h",
"chars": 3494,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/wast-parser.h",
"chars": 12594,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "include/wabt/wat-writer.h",
"chars": 1166,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "man/spectest-interp.1",
"chars": 2115,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm spectest-interp\n.Nd read a Spectest JSON file, and run its tests in the inter"
},
{
"path": "man/wasm-decompile.1",
"chars": 2076,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wasm-decompile\n.Nd translate from the binary format to readable C-like syntax"
},
{
"path": "man/wasm-interp.1",
"chars": 3090,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wasm-interp\n.Nd decode and run a WebAssembly binary file\n.Sh SYNOPSIS\n.Nm was"
},
{
"path": "man/wasm-objdump.1",
"chars": 1181,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wasm-objdump\n.Nd print information about a wasm binary\n.Sh SYNOPSIS\n.Nm wasm-"
},
{
"path": "man/wasm-stats.1",
"chars": 2152,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wasm-stats\n.Nd show stats for a module\n.Sh SYNOPSIS\n.Nm wasm-stats\n.Op option"
},
{
"path": "man/wasm-strip.1",
"chars": 839,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wasm-strip\n.Nd remove sections of a WebAssembly binary file\n.Sh SYNOPSIS\n.Nm "
},
{
"path": "man/wasm-validate.1",
"chars": 2031,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wasm-validate\n.Nd validate a file in the WebAssembly binary format\n.Sh SYNOPS"
},
{
"path": "man/wasm2c.1",
"chars": 2506,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wasm2c\n.Nd convert a WebAssembly binary file to a C source and header\n.Sh SYN"
},
{
"path": "man/wasm2wat.1",
"chars": 2622,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wasm2wat\n.Nd translate from the binary format to the text format\n.Sh SYNOPSIS"
},
{
"path": "man/wast2json.1",
"chars": 2537,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wast2json\n.Nd convert a file in the wasm spec test format to a JSON file and "
},
{
"path": "man/wat-desugar.1",
"chars": 2449,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wat-desugar\n.Nd parse .wat text form and print \"canonical\" flat format\n.Sh SY"
},
{
"path": "man/wat2wasm.1",
"chars": 2743,
"preview": ".Dd $Mdocdate$\n.Dt WABT 1\n.Os\n.Sh NAME\n.Nm wat2wasm\n.Nd translate from WebAssembly text format to the WebAssembly binary"
},
{
"path": "scripts/TC-s390x.cmake",
"chars": 324,
"preview": "set(CMAKE_SYSTEM_NAME Linux)\n\nset(CMAKE_C_COMPILER /opt/bin/distcc_symlinks/s390x-linux-gnu-gcc)\nset(CMAKE_CXX_COMPILER "
},
{
"path": "scripts/check_clean.py",
"chars": 1305,
"preview": "#!/usr/bin/env python3\n#\n# Copyright 2016 WebAssembly Community Group participants\n#\n# Licensed under the Apache License"
},
{
"path": "scripts/clang-format-diff.sh",
"chars": 1208,
"preview": "#!/bin/bash\n\nset -o errexit\nset -o pipefail\n\nif [ -n \"$1\" ]; then\n BRANCH=\"$1\"\nelif [ \"$CI\" != \"true\" ]; then\n echo \"P"
},
{
"path": "scripts/coverage.sh",
"chars": 1278,
"preview": "#!/bin/bash\n#\n# Copyright 2017 WebAssembly Community Group participants\n#\n# Licensed under the Apache License, Version 2"
},
{
"path": "scripts/example-project/CMakeLists.txt",
"chars": 232,
"preview": "cmake_minimum_required(VERSION 3.16)\nproject(example CXX)\n\nenable_testing()\n\nfind_package(wabt REQUIRED)\n\nadd_executable"
},
{
"path": "scripts/example-project/example.cpp",
"chars": 37,
"preview": "#include <wabt/ir.h>\n\nint main () {}\n"
},
{
"path": "scripts/fuzz-wasm-objdump.sh",
"chars": 836,
"preview": "#!/bin/bash\n#\n# Copyright 2019 WebAssembly Community Group participants\n#\n# Licensed under the Apache License, Version 2"
},
{
"path": "scripts/fuzz-wasm2wat.sh",
"chars": 933,
"preview": "#!/bin/bash\n#\n# Copyright 2016 WebAssembly Community Group participants\n#\n# Licensed under the Apache License, Version 2"
},
{
"path": "scripts/fuzz-wat2wasm.sh",
"chars": 954,
"preview": "#!/bin/bash\n#\n# Copyright 2016 WebAssembly Community Group participants\n#\n# Licensed under the Apache License, Version 2"
},
{
"path": "scripts/gen-emscripten-exported-json.py",
"chars": 3404,
"preview": "#!/usr/bin/env python3\n#\n# Copyright 2016 WebAssembly Community Group participants\n#\n# Licensed under the Apache License"
},
{
"path": "scripts/gen-wasm2c-templates.cmake",
"chars": 245,
"preview": "# https://stackoverflow.com/a/47801116\nfile(READ ${in} content)\nstring(REGEX REPLACE \"(.[^\\n]*\\n)\" \"R\\\"w2c_template(\\\\1)"
},
{
"path": "scripts/generate-html-docs.sh",
"chars": 997,
"preview": "#!/bin/bash\n#\n# Copyright 2020 WebAssembly Community Group participants\n#\n# Licensed under the Apache License, Version 2"
},
{
"path": "scripts/help2man.lua",
"chars": 3576,
"preview": "#!/usr/bin/env lua\n\nlocal format_br = '\\n.br\\n'\nlocal tools = {\n\t\"wasm-decompile\",\t\"wasm-interp\",\t\"wasm-objdump\",\t\"wasm-"
},
{
"path": "scripts/sha256sum.py",
"chars": 1099,
"preview": "#!/usr/bin/env python\n#\n# Copyright 2018 WebAssembly Community Group participants\n#\n# Licensed under the Apache License,"
},
{
"path": "scripts/wabt-config.cmake.in",
"chars": 246,
"preview": "cmake_minimum_required(VERSION 3.10)\n@PACKAGE_INIT@\n\nif (\"@HAVE_OPENSSL_SHA_H@\")\n include(CMakeFindDependencyMacro)\n "
},
{
"path": "src/apply-names.cc",
"chars": 16499,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/binary-reader-ir.cc",
"chars": 67425,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/binary-reader-logging.cc",
"chars": 39642,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/binary-reader-objdump.cc",
"chars": 83533,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/binary-reader-stats.cc",
"chars": 9188,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/binary-reader.cc",
"chars": 116368,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/binary-writer-spec.cc",
"chars": 20269,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/binary-writer.cc",
"chars": 69564,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/binary.cc",
"chars": 1707,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/binding-hash.cc",
"chars": 2837,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/c-writer.cc",
"chars": 194378,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/color.cc",
"chars": 1754,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/common.cc",
"chars": 4718,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/config.cc",
"chars": 4547,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/config.h.in",
"chars": 7461,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/decompiler.cc",
"chars": 29912,
"preview": "/*\n * Copyright 2019 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/emscripten-exports.txt",
"chars": 2206,
"preview": "_free\n_malloc\n_wabt_annotations_enabled\n_wabt_apply_names_module\n_wabt_bulk_memory_enabled\n_wabt_code_metadata_enabled\n_"
},
{
"path": "src/emscripten-helpers.cc",
"chars": 12788,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/error-formatter.cc",
"chars": 4127,
"preview": "/*\n * Copyright 2018 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/expr-visitor.cc",
"chars": 14867,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/feature.cc",
"chars": 1770,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/filenames.cc",
"chars": 1691,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/generate-names.cc",
"chars": 13963,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/interp/binary-reader-interp.cc",
"chars": 69391,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/interp/interp-util.cc",
"chars": 3484,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/interp/interp-wasi.cc",
"chars": 27845,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/interp/interp-wasm-c-api.cc",
"chars": 43665,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/interp/interp.cc",
"chars": 103806,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/interp/istream.cc",
"chars": 29518,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/interp/wasi_api.def",
"chars": 687,
"preview": "WASI_FUNC(proc_exit)\nWASI_FUNC(fd_read)\nWASI_FUNC(fd_pread)\nWASI_FUNC(fd_write)\nWASI_FUNC(fd_pwrite)\nWASI_FUNC(fd_close)"
},
{
"path": "src/ir-util.cc",
"chars": 8178,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/ir.cc",
"chars": 18958,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/leb128.cc",
"chars": 11016,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/lexer-keywords.txt",
"chars": 32537,
"preview": "struct TokenInfo {\n TokenInfo(const char* name) : name(name) {}\n TokenInfo(const char* name, TokenType token_type)\n "
},
{
"path": "src/lexer-source-line-finder.cc",
"chars": 4649,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/lexer-source.cc",
"chars": 1985,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/literal.cc",
"chars": 23553,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/opcode-code-table.c",
"chars": 1425,
"preview": "/*\n * Copyright 2018 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/opcode.cc",
"chars": 13800,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/option-parser.cc",
"chars": 10415,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/prebuilt/.clang-format",
"chars": 40,
"preview": "DisableFormat: true\nSortIncludes: false\n"
},
{
"path": "src/prebuilt/lexer-keywords.cc",
"chars": 87412,
"preview": "/* C++ code produced by gperf version 3.2.1 */\n/* Command-line: gperf -m 50 -L C++ -N InWordSet -E -t -c --output-file=s"
},
{
"path": "src/prebuilt/wasm2c_atomicops_source_declarations.cc",
"chars": 21476,
"preview": "const char* s_atomicops_source_declarations = R\"w2c_template(#include <stdatomic.h>\n)w2c_template\"\nR\"w2c_template(\n#ifnd"
},
{
"path": "src/prebuilt/wasm2c_header_bottom.cc",
"chars": 150,
"preview": "const char* s_header_bottom = R\"w2c_template(#ifdef __cplusplus\n)w2c_template\"\nR\"w2c_template(}\n)w2c_template\"\nR\"w2c_tem"
},
{
"path": "src/prebuilt/wasm2c_header_top.cc",
"chars": 884,
"preview": "const char* s_header_top = R\"w2c_template(#include <stdint.h>\n)w2c_template\"\nR\"w2c_template(\n#ifndef WASM_RT_CORE_TYPES_"
},
{
"path": "src/prebuilt/wasm2c_simd_source_declarations.cc",
"chars": 32748,
"preview": "const char* s_simd_source_declarations = R\"w2c_template(#if defined(__GNUC__) && defined(__x86_64__)\n)w2c_template\"\nR\"w2"
},
{
"path": "src/prebuilt/wasm2c_source_declarations.cc",
"chars": 44986,
"preview": "const char* s_source_declarations = R\"w2c_template(\n// Computes a pointer to an object of the given size in a little-end"
},
{
"path": "src/prebuilt/wasm2c_source_includes.cc",
"chars": 848,
"preview": "const char* s_source_includes = R\"w2c_template(#include <assert.h>\n)w2c_template\"\nR\"w2c_template(#include <math.h>\n)w2c_"
},
{
"path": "src/resolve-names.cc",
"chars": 20782,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/sha256.cc",
"chars": 1353,
"preview": "/*\n * Copyright 2017 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/shared-validator.cc",
"chars": 50339,
"preview": "/*\n * Copyright 2020 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/stream.cc",
"chars": 8947,
"preview": "/*\n * Copyright 2016 WebAssembly Community Group participants\n *\n * Licensed under the Apache License, Version 2.0 (the "
},
{
"path": "src/template/wasm2c.bottom.h",
"chars": 28,
"preview": "#ifdef __cplusplus\n}\n#endif\n"
},
{
"path": "src/template/wasm2c.declarations.c",
"chars": 26018,
"preview": "\n// Computes a pointer to an object of the given size in a little-endian memory.\n//\n// On a little-endian host, this is "
},
{
"path": "src/template/wasm2c.includes.c",
"chars": 334,
"preview": "#include <assert.h>\n#include <math.h>\n#include <stdarg.h>\n#include <stddef.h>\n#include <string.h>\n#if defined(__MINGW32_"
}
]
// ... and 1650 more files (download for full content)
About this extraction
This page contains the full source code of the WebAssembly/wabt GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1850 files (8.5 MB), approximately 2.3M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.